2012-03-22 37 views
11

在对question的回答中,我找到了一个使用$ elemMatch搜索数组值的有趣解决方案。

如果我们有我们的集合中的下列文件:

{ 
    foo : [ { bar : "xy", baz : 1 }, 
      { bar : "a", baz : 10 } ] 
}, 
{ 
    foo : [ { bar : "xy", baz : 5 }, 
      { bar : "b", baz : 50 } ] 
} 

下面的查询仅匹配的头文件:

db.test.find({ 
    foo : { "$all" : [ { "$elemMatch" : { bar : "xy", baz : 1} }, { "$elemMatch" : { bar : "a", baz : 10 } } ] } 
}); 

我与其他几个例子试了一下,它确实有效。但$all运营商的官方文档没有说明有关组合这两个查询的任何内容。

这是预期的行为或错误?或者这只是文档不包含此用例的问题?

回答

5

这是预期的行为。文档不包括这个用例,我们正在努力使它更好。然而,它很难记录每个可能的查询组合。

+2

感谢您的信息。我知道很难记录每一个组合,但知道一些运营商可以合并是非常有用的。 – 2012-03-22 16:05:54

+0

有没有办法做到这一点呢? – 2014-08-03 10:11:14