2015-04-02 57 views
0

我的數據模型看起來大致是這樣的:貓鼬:找到混合架構類型的文件具有多個條目

data = { 
    ... 
    parameters: [{type:Schema.Types.mixed}], 
    ... 
} 

如果我現在將文檔插入到數據庫中,

doc = { 
    ... 
    parameters:[{"foo":"bar"}], 
    ... 
} 

我可以通過查詢它「參數」鍵:

db.dataset.find({"parameters":[{"foo":"bar"}]},function(doc){ 
    ... 
}) 

並取回預期的文檔。但是,如果「參數」包含多個密鑰,例如

doc = { 
    ... 
    parameters:[{"foo":"bar","ding":"dong"}] 
    ... 
} 

我找不到它了。爲什麼?

回答

1

這是因爲查詢不能匹配任何文件,其中數組字段parameters具有精確的數組對象作爲其值[{"foo": "bar", "ding": "dong"}]。爲了證明這一點,讓我們來插入一些樣本文檔的集合:

/* 0 */ 
{ 
    "_id" : ObjectId("551d777fcfd33f4e2a61e48f"), 
    "parameters" : [ 
     { 
      "foo" : "bar" 
     } 
    ] 
} 

/* 1 */ 
{ 
    "_id" : ObjectId("551d777fcfd33f4e2a61e490"), 
    "parameters" : [ 
     { 
      "foo" : "bar", 
      "ding" : "dong" 
     } 
    ] 
} 

查詢該集合parameters陣列與此對象數組[{"foo":"bar"}]將帶來文檔與「_id」:ObjectId("551d777fcfd33f4e2a61e48f")。但是,如果您將查詢對象更改爲使用$elemMatch,那麼它將帶來兩個文檔:

db.collection.find({"parameters": { "$elemMatch": { "foo": "bar" } }});