編輯 這是在我的應用程序的心臟,因此,我提出了一個bounty整蠱MongoDB的搜索challange - 賞金
原始
我有,我從來沒有遇到一個棘手的mongoDB
問題。我的網路研究不成功。
文件:
的documents
我collection
有一個搜索object
含有名爲keys
和陣列values
。密鑰以八個categorys
之一命名,相應的值爲array
,其中包含該類別的items
。
{
_id: "bRtjhGNQ3eNqTiKWa",
/* */
search :{
usage: ["accounting"],
test: ["knowledgetest", "feedback"]
},
test: {
type:"list",
vals: [
{name:'knowledgetest', showName: 'Wissenstest'},
{name:'feedback', showName: '360 Feedback'},
]
},
usage: {
type:"list",
vals: [
{name:'accounting', showName: 'Accounting'},
]
}
},
{
_id: "7bgvegeKZNXkKzuXs",
/* */
search :{
usage: ["recruiting"],
test: ["intelligence", "feedback"]
},
test: {
type:"list",
vals: [
{name:'intelligence', showName: 'Intelligenztest'},
{name:'feedback', showName: '360 Feedback'},
]
},
usage: {
type:"list",
vals: [
{name:'recruiting', showName: 'Recruiting'},
]
}
},
查詢
query
的是含有相同category - keys
和array - values
一個object
。
{
usage: ["accounting", "assessment"],
test : ["feedback"]
}
期望得到的結果
- 如果查詢是空的,我想
all
文件。 - 如果查詢有
one
類別和任意數量的項目,我希望所有documents
具有指定的category
中的所有items
。 - 如果查詢有多個類別,我希望所有
documents
在所有指定的categorys
中都具有所有items
。
我嘗試次數
我試過各種變化:
XX.find({
'search': {
"$elemMatch": {
'tool': {
"$in" : ['feedback']
}
}
}
沒有成功。 編輯 試過:'search.test': {$all: (query.test ? query.test : [])}
如果我沒有選擇任何東西,它會給我沒有結果;當我只看test
類別時,右邊documents
;當我另外看usage
類別時什麼也沒有。
當查詢中給定的所有數組元素搜索,你將不得不使用$所有,而不是$ elemMatch。儘管如此,這並不能解決您的問題,基本上,您存儲的數據結構不適合您想要創建的查詢。您應該使用類別作爲密鑰來單獨存儲陣列。然後,每個單獨的查詢歸結爲{'category':{$ all:[myinputarray]}}。請注意,這是一個文檔數據庫 - 建模將由您期望的QUERIES完成,而不是您想象得最好的任何模型。 – mtj
@mtj每個文檔還包含類別作爲鍵,但是數據嵌套在'showName:「字符串中,類型:{},vals:[{name:」string「,showName:」string「}],[ {...}]'與相關條目相關的參數是'vals [x] .name'。 –
@mtj我編輯了我的問題**文檔**部分。 –