2016-12-05 78 views
0
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 

如何进行相同的查询但忽略对象内键/值对的顺序?mongodb - 输入运算符 - 忽略对象键值顺序

+0

$ in独立于数组元素的排序。你得到什么问题。 –

回答

2

你想在这种情况下使用$elemMatch而不是$in

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

原因$in不起作用的是,它匹配对数组字段的内容整个价值操作,是因为你提供了一个对象,该对象必须完全匹配,包括字段顺序。

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

+1

此列表中的项目1讨论此行为:[http://devblog.me/wtf-mongo](http://devblog.me/wtf-mongo) – JeremyK

+0

谢谢但.. .. db.mice.find({ 'strain':{{name:'Str1',mode:'++'},{name:'Str2',mode:'++'}]}})。count() – arx

+0

@arx推测返回的计数为1,因为有一个文档包含一个'strains'数组,其中包含这些确切对象中的一个。 – JohnnyHK