私のデータ構造は次のとおりです。mongodbとpymongoで空の文字列をテストします
[{
"name": "David",
"lastname": "",
},
{
"name": "Angela"
}]
「姓」は時々存在し、ときどきありませんし、いつかは「」です。
姓が ""でない行をすべて取得したいとします。しかし、これは機能しません。 lastnameが ""のときとlastnameが全く存在しないときの両方の行を返します。上記の例では、Davidノードのみを取得したいと考えています。 mongoシェル(IDのスペースを節約するために省略)
> db.collection.find()
{ "name" : "Angela" }
{ "name" : "David", "lastname" : "" }
{ "name" : "Kyle", "lastname" : "Test" }
{ "name" : "John", "lastname" : null }
> db.collection.find({"lastname" : {"$exists" : true, "$ne" : ""}})
{ "name" : "Kyle", "lastname" : "Test" }
{ "name" : "John", "lastname" : null }
で
db.collection.find({"lastname": {"$ne": ""}})
$ neの周りの引用符は、Pythonに必要です。式{$ ne: ""}は、level2_cが ""である場合と、level2_cノードが存在しない場合の両方でtrueと評価されます。だから、私は{"level2_c":{"$ exists":True}、 "level1_b.level2_c":{"$ ne": "}}のようにフィルタリングしなければなりませんでした。これは動作しますが、やや醜いです。 –
私はmongoシェルからテストしていました。あなたは正しい答えを見つけてうれしいです。 – Kyle
ありがとうございます。私は少し質問を明確にした。もう一度見ていただけますか? {"lastname":{"$ exists":True}、 "lastname":{"$ ne": "}}? –