Właściwie byłeś całkiem blisko rozwiązania, wszystko, czego potrzebujesz, aby użyć tego podczas tworzenia indeksu :
partialFilterExpression: { serialNr: {$exists:true} }
Upewnij się, że masz co najmniej 3.2 wersję mongo
Przykład :
db.col.createIndex({a:1, b:1},{unique:true, partialFilterExpression: { a: {$exists:true} })
db.col.save({a:50, b:27}) //pass
db.col.save({a:50, b:27}) //fails
db.col.save({b:27}) //pass
db.col.save({b:27}) //pass
db.col.save({b:27}) //pass
db.col.save({a:50, b:27}) //fails
db.col.save({a:50}) //pass
db.col.save({a:50}) //fails
PS:Może możesz zrobić mały "hack" i użyć tego:partialFilterExpression: { serialNr: {$exists:true}, serialNr: {$gte:0} }
Próbowałem użyć $ne, ale powodowało to błąd.