db.mice.find({'strains': {$in : [{mode:'++',name:'Str1'},{mode:'++',name:'Str2'}]}}).count()
// returns 0
db.mice.find({'strains': {$in : [{name:'Str1',mode:'++'},{name:'Str2',mode:'++'}]}}).count()
// returns 1
如何进行相同的查询但忽略对象中键/值对的顺序?
答案 0 :(得分:2)
在这种情况下,您可能希望使用$elemMatch
代替$in
:
db.mice.find({'strains': {$elemMatch: {mode:'++', name:'Str1'}}}).count()
$in
不起作用的原因是它操作时将整个值与数组字段的元素进行匹配,因此,因为您提供了一个对象,所以该对象必须完全匹配,包括字段顺序。
然而,$elemMatch
值被解释为查询对象,而不是单个值,因此字段顺序无关紧要。