これが私のデータ構造です。
[{
"name": "David",
"lastname": "",
},
{
"name": "Angela"
}]
「姓」が存在する場合と存在しない場合があり、「」が存在する場合もあります。
「」と等しくない姓を持つすべての行を取得したい。しかし、これは機能しません。 lastnameが ""の場合とlastnameがまったく存在しない場合の両方の行を返します。上記の例では、Davidノードのみを取得します。
db.collection.find( {"lastname": {"$ne": ""}} )
db.collection.find({"lastname" : {"$exists" : true, "$ne" : ""}})
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 }
Null値に対する一致を除外する場合は、次のように基準を調整する必要があります(「$ ne」として$ existsを削除することもできます。nullがこれを処理します)
> db.collection.find({$and:[{"lastname": {"$ne": null}}, {"lastname": {"$ne": ""}}]})
{ "name" : "Kyle", "lastname" : "Test" }
正規表現クエリを使用できます。
db.test.find({ "lastname": /(.|\s)*\S(.|\s)*/ })
この正規表現は、0またはN個の空白文字で始まるまたは終わる文字列に一致します(.|\s)
そして、それは1つ以上の非空白スペースでなければなりません\S
途中で。