mongodb - in operator - 忽略对象键顺序

时间:2016-12-05 19:48:49

标签: javascript node.js mongodb

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

如何进行相同的查询但忽略对象中键/值对的顺序?

1 个答案:

答案 0 :(得分:2)

在这种情况下,您可能希望使用$elemMatch代替$in

db.mice.find({'strains': {$elemMatch: {mode:'++', name:'Str1'}}}).count()

$in不起作用的原因是它操作时将整个值与数组字段的元素进行匹配,因此,因为您提供了一个对象,所以该对象必须完全匹配,包括字段顺序。

然而,$elemMatch值被解释为查询对象,而不是单个值,因此字段顺序无关紧要。