2015-08-28 54 views
0

雖然MongoDB的點綴查詢作品,elemMatch查詢不

collection.find({ "data.username": "someusername" }}})

作品,取1個匹配的文檔,這

collection.find({ data: { $elemMatch: { username: "someusername" }}})

不取任何東西。不應該嗎? (我會使用虛線但想要擴展查詢。)

這是與Meteor集合中的mongo控制檯。在Robomongo和流星控制檯也嘗試過,結果也一樣。

修訂:這裏有一個文件(修剪)

{ 
    "_id" : "fDyZsiuqQgkRmPno5", 
    "type" : "user", 
    "data" : { 
     "id" : 1234, 
     "username" : "someusername", 
     "website" : "http://www.somewhere.com", 
     "email" : null, 
     "payments" : [ 
      { 
       "payment" : { 
        "id" : "zFyZsiGgQskRmPn43" 
       } 
      } 
     ] 
    }, 
    "createdAt" : ISODate("2015-08-28T12:16:46.918+02:00") 
} 
+0

正如我在我的回答(甚至在你的「編輯」之前)所說的,你不能在這裏使用'$ elemMatch',因爲'data'不是數組字段 – styvane

+0

我知道。標記爲正確。我只是在寫信給你。 :) – jiku

回答

1

你的第二個查詢沒有返回任何結果,因爲data不是陣列領域的一個例子。這是預期的行爲看到documentation

$elemMatch操作者匹配包含與所有指定的查詢條件匹配的至少一個元素的數組字段的文檔。

+0

謝謝,接受,因爲它回答。將工作包中的數據包裝起來。文檔不會有多個數據子文檔,因此知道是否有有效的方法來查詢具有多個條件(如$ elemMatch)的文檔是非常好的。 – jiku