あなたは実際にはソリューションに非常に近かったので、インデックスを作成するときにこれを使用する必要があります:
partialFilterExpression: { serialNr: {$exists:true} }
少なくとも3.2バージョンのmongoを持っていることを確認してください
例:
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:たぶんあなたは少し「ハック」してこれを使うことができます:partialFilterExpression: { serialNr: {$exists:true}, serialNr: {$gte:0} }
$ neを使用してみましたが、エラーが発生しました。