下面的查询查找包含以下内容的文档:
"tags" : [ { "a" : "a" } ]
但不是:
"tags" : [ { "a" : "a", "b" : "b" } ]
那为什么不呢?
这是查询:
$tag = "a";
$query['tags'] = array(
'$in' => array(
array(
$tag => $tag
)
)
);
@nadirsaghar
实际上,以下工作正常
db.inventory.insert({tags: [ {'a':'a'}, {'b': 'b'}] });
db.inventory.find({tags: {$in: [ {'a': 'a'}]}});
对该结构执行查询,
{ tags: { $in: ["a", "b"] } }
会失败。
所以更好的说法是,用于 $in 的查询结构必须与正在搜索的内容相匹配。如果标签是单个元素的数组,例如 ["a","b"] ,您的 $in 查询也必须搜索单个元素。如果搜索对象,查询中的对象需要匹配数组中的对象。
这假设他的初始标签是一个错字,应该阅读
"tags" : [ { "a" : "a"}, {"b" : "b" } ]