2016-04-15 5 views
1

フィールドの値がnullのすべてのドキュメントを返す単純なMongoクエリを作成しようとしています。あなたが何をそれと呼ぶか)。フィールドの値がヌルまたは空であるすべてのドキュメントを見つける方法

ここは私の質問です。ここで

db.getCollection('contact').find({'poco.name.email':false})

RoboMongoを使用して私のコレクションのスクリーンショットです。

screenshot of my collection using RoboMongo

最終的に、私はいくつかのPHPにこれを転送する必要があります。これまで私はこれを働かせました。おそらく方法によりアクセスすることなく答えることは難しいことになるだろう

$conditions = array_merge($conditions, [ 
    'owner.$id' => $this->getId(), 
    'poco.name.familyName' => "Smith", 
    //not sure what goes here.. something like 
    //'poco.emails' => null, 
]); 

return Model_Mongo_Contact::getContacts($conditions, $sort, $fields, $limit, $skip); 

...またはそうでないかもしれない、私はそれが本当に明白であるかもしれないモンゴすることは非常に新しいです。

+0

このドキュメントは役に立ちます:https://docs.mongodb.org/manual/reference/operator/query/exists/ – Rajesh

+0

@Rajesh ['$ exists'](https://docs.mongodb.org/)手動で/参照/演算子/クエリ/存在/)ここで使用する正しいことですが、実際に "両方"空の配列だけでなく、配列でないか存在しないものを検出する特定の使用法があります。 '' poco.email.0 '':{"$ exists":false} 'であり、' 0'インデックスの位置を探します。 '真の条件として、配列は存在し、空ではないので、' false'は自然に逆になります。それが、ここで与えられた答えの1つです。 –

答えて

0

私はPHPの専門家ではないが、私のようにモンゴシェルでやってます:上記

db.collection.find({ 
    $and: [ 
    {"poco.email":{$exists: true}}, 
    {"poco.email":{$ne: []}} 
    ]}) 

クエリpoco.name.emailが欠落していないすべてのドキュメントを一覧表示し、空ではないでしょう。

0

「空の」配列または「存在しない」を探すときの基本概念は、「ドット表記」のプロパティを使用して、配列の0インデックスが存在しない場所を検索することです。これは$exists演算子を使用して達成することができます。

$conditions = array_merge($conditions, [ 
    'owner.$id' => $this->getId(), 
    'poco.name.familyName' => "Smith", 
    'poco.emails.0' => array('$exists' => FALSE) 
]); 

全く性質が全く存在しないのいずれかとき、またはそれは、配列(したがって、無"0"フィールドプロパティ)以外のものであるか、実際に「あれば条件が真であること空の "配列(最初のインデックスには内容がないため)を返します。

これは、フィールドが実際に「インデックスされている」場合に最適です。したがって、あなたの "通常の"構造で配列要素の中に"address"という一貫したフィールドがあり、そのインデックスが"poco.emails.address"となっている場合は、その特定のインデックスされたプロパティを指して、$exists

$conditions = array_merge($conditions, [ 
    'owner.$id' => $this->getId(), 
    'poco.name.familyName' => "Smith", 
    'poco.emails.0.address' => array('$exists' => FALSE) 
]); 

しかし、アレイは純粋にのみ「値」とNO「サブ文書」で構成されている場合、単に最初に十分であろう実証されるようにアレイの0インデックス位置をテスト

関連する問題