を返さない存在、私はこれがさえ可能であるかを理解していない:
> db.ts.find({"bcoded_metadata" : { "$exists" : true} }).count()
199049
> db.ts.find({"bcoded_metadata" : { "$exists" : false} }).count()
0
> db.ts.count()
2507873
Iは、第一及び第二のクエリの合計が第三に等しくなければなりませんと思います。
"bcoded_metadata"が存在しないが、クエリから何も返されないすべての要素をコレクションから選択する必要があります。 シンプルなpythonスクリプトでこのコレクションを繰り返し、 "bcoded_metadata"がすべて存在するかどうかを手動でチェックすると、期待通りに機能します。
from pymongo import Connection
connection = Connection('127.0.0.1', 27017)
db = connection.data
c = 0
for item in db.ts.find():
if not "bcoded_metadata" in item.keys():
c+= 1
print c
python test.py
2308824
これは正解です。
問題の原因はどこですか?
インデックス:あなたはbcoded_metadata
のためのスパースインデックスを使用しているため
> db.ts.getIndexes();
[
{
"name" : "_id_",
"ns" : "data.ts",
"key" : {
"_id" : 1
},
"v" : 0
},
{
"_id" : ObjectId("4f3c299b4c4a5ccfddbe4069"),
"ns" : "data.ts",
"key" : {
"last_seen" : 1
},
"name" : "last_seen_1",
"v" : 0
},
{
"_id" : ObjectId("4f3c2cef4c4a5ccfddbe406a"),
"ns" : "data.ts",
"key" : {
"attempts" : -1
},
"name" : "attempts_-1",
"v" : 0
},
{
"_id" : ObjectId("4f4279ed6aca13be31acbe6d"),
"ns" : "data.ts",
"key" : {
"bcoded_metadata" : 1
},
"name" : "bcoded_metadata_1",
"sparse" : true,
"v" : 0
}
]
それはモンゴシェルからまたはドライバを使用して、クエリでは? –
@marcolinuxクエリはfromシェルから実行されます。 pythonスクリプトは、明らかにドライバを介して動作します。 – Moonwalker
このバグでしょうか? https://jira.mongodb.org/browse/SERVER-3918 –