2016-12-05 20 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