2013-08-22 90 views
0

我有下列文件中MongoDB的MongoDB的確切子文檔查詢

{ "_id" : ObjectId("5215c622f8b2bae39d82b54c"), "params" : { "groupBy" : "days", "country" : "A", "city" : "b" } } 
{ "_id" : ObjectId("5215c62df8b2bae39d82b54d"), "params" : { "groupBy" : "days", "country" : "A" } } 
{ "_id" : ObjectId("5215c643f8b2bae39d82b54e"), "params" : { "groupBy" : "days" } } 

,我試圖用這個查詢

{params : {groupBy : 'days', country : 'A', 'city' : 'b'}} 

確定找到的第一個文件,沒有問題,它的工作原理。 讓我們試試這個

{params : {groupBy : 'days', city : 'b', country : 'A'}} 

和這一個不出奇的工作。 好吧,現在我知道訂單確實重要。

我知道如果我想忽略屬性的順序,我可以這樣做來搜索第一個文檔。

{ 'params.groupBy' : 'days' , 'params.city' : 'b', 'params.country' : 'A' } 

現在考慮我想找到第二個文檔,我不知道以前的屬性順序。 所以我會做什麼是

{'params.groupBy' : 'days' , 'params.country' : 'A'} 

但此查詢發現無論是第1和第2個文件。

那麼如何才能找到第二個文件只有一個查詢?

編輯: 一個條件是我不知道有多少屬性將在PARAMS子文檔在將來,它可能會保持從時間更改爲時間

+0

嘗試'{PARAMS:{GROUPBY: 「天」,國家 「A」}}' –

+0

但我之前沒有順序。所以我不知道它應該是'{params:{groupBy:「days」,country:「A」}}或'{params:{country:「A」,groupBy:「days」}}' –

+0

order is matter。在這種情況下,您的查詢字符串應該與文檔中的子文檔完全相同。 –

回答

1

通過只發現2號文件查詢您將需要使用$exists運算符。

您的查詢應該是這樣的:

db.params.find({'params.groupBy': 'days', 'params.country': 'A', 'params.city': {$exists: false}}) 
+0

謝謝。但實際上我不確定params子文檔中有多少屬性,並且它可能會不時發生變化 –

+0

在這種情況下,您需要將其添加到您的問題中,因爲這會回答您在查找第二個文檔時的初始查詢你的例子 –