我的Mongo文档中出现以下类型。
"tags" : [ [ "narnia" ], [ "aslan" ], [ "winter" ], [ "heaven" ] ]
我需要知道如何通过匹配所有任意数量的标签来查找此文档。即纳尼亚和阿斯兰(但不是纳尼亚或阿斯兰)。
需要在PHP中进行查询。
到目前为止,我只使用它来处理单个标签。即。
$filter['tags'] = array('$in' => array(array('Narnia')));
答案 0 :(得分:1)
正如Hussain在评论中提到的那样 - 您可能希望修改该文档结构,因为您似乎存储了不必要的数组。
否则,您尝试执行的操作可以使用$and
语句完成(没有嵌套数组的示例):
PRIMARY> db.wardrobe.find({ $and: [ { tags: "narnia" }, { tags: "tugboat" } ] })
//returns nothing
PRIMARY> db.wardrobe.find({ $and: [ { tags: "narnia" }, { tags: "winter" } ] })
//returns { "_id" : ObjectId("521067a48202463b88c2a0c9"), "tags" : [ "narnia", "aslan", "winter", "heaven" ] }
在PHP中:
//With your nested arrays:
$filter = array(
'$and' => array(
array('tags' => array('narnia') ),
array('tags' => array('aslan') )
)
);
//With a simple array:
$filter = array(
'$and' => array(
array('tags' => 'narnia'),
array('tags' => 'aslan')
)
);
$mongoClient->selectCollection('cwlewis', 'wardrobe')->find( $filter );