2

次のクエリを確認してください。

 db.models.findOne({ "value.userId": { $ne: null } }, { "value.userId":1}).value.userId == null

これは言う:

  1. null以外のユーザーIDフィールドを持つレコードを検索します
  2. 結果にユーザーIDを返します
  3. その値をnullと比較します

null値のないレコードのみを返すため、その結果をnullと比較すると常にfalseが返されます。ただし、これは常にtrueを返します。

.findOne(...)を実行して、比較を実行する代わりにそれを出力すると、次のようになります。

{ "_id": 4, "value": { "userId": null }

誰かがここで何が起こっているのか手がかりを持っていますか?

編集:このフィールドの「タイプ」は明らかに6であり、10ではありません。これはnullのはずです。EDIT2:どうやらタイプ6は「未定義」です-なぜそれがnullを出力するのかわかりません...

4

1 に答える 1

3

ここでの問題は、値を出力しようとすると、エラーを発行するのではなくundefined、MongoDBが出力することです。null

この例を参照してください:-

> db.foo.save({"amount": undefined})
> db.foo.find({"amount": {$ne: null}})
{ "_id" : ObjectId("50d0d3a1511dd1035f01c636"), "amount" : null }

つまり、あなたが言っているように、のタイプはuserId6undefinedためのものなので、それは印刷されnullます。また、です$ne: nullので、それもマッチしています。

このリンクを参照してください:-http: //realprogrammer.wordpress.com/2012/11/04/null-undefined-nan-and-missing-property-goto-considered-harmful-part-2/


ただし、と同じ動作が見られる場合はnull、目的の結果が得られます。-

> db.foo.save({"amount": null})
> db.foo.findOne({"amount": {$ne: null}}) 
null
于 2012-12-18T20:39:05.343 に答える