[英]Mongoose distinct condition not working
我使用貓鼬使用以下方案查詢MongoDB:
var File = mongoose.model('File',{
size: Number,
type: String,
filename: String,
path: String,
taxonomies:[{
tags:[{
name:String,
'tag':String
}],
name: String
}]
});
現在,我想做一個獨特的查詢,如下所示:
File.distinct('taxonomies.tags.tag', {'taxonomies.name':'AM'},function(error, tags){
if(err)
res.send(err);
console.log("All distinct tags", tags);
})
從分類名稱為“ AM”的所有文件中獲取所有唯一標簽。 問題在於上面的查詢返回所有標簽,包括那些具有不同taxonomies.name的標簽。 沒有條件,它就可以正常工作。
我在這里有語法錯誤嗎?還是我誤解了不同的工作原理?
更新(更多示例)每個文檔都有一個名稱為SM的分類法和一個名稱為AM的分類法,例如
taxonomies: [{
tags: [
{
name:"Type",
'tag':kind
}, {
name:"Language",
'tag':lang
},
{
name:"Code",
"tag":code
}],
name:'AM'
}, {
name:'SM',
tags:[{
name:"Sales",
'tag':'has to be sold'
},{
name:"Personal filter",
'tag':'temp'
}]
}]
當我執行上述查詢時,得到的結果是:
所有不同的標簽['4007','fr','必須出售','temp','wol','16104','en']
而“ temp”和“必須出售”來自SM,而不是AM。
結果,我只希望在所有文檔中使用taxonomies.name ='AM'的文檔,而不能重復
查詢選擇是在選擇文檔 ,而不是數組中的元素:
{'taxonomies.name':'AM'}
該條件將選擇整個文檔。
結果,兩個數組中的所有項目都被認為對distinct
操作有效。 如果只希望考慮子集,則需要使用聚合框架進行過濾或修改文檔,以使兩個分類法不會存儲在同一文檔中。
如果您使用聚合框架而不是distinct
命令,則可以使用很多選項來收集distinct值:
db.test.aggregate({$unwind: "$taxonomies" },
{ $group :
{ _id: "$taxonomies.name",
tags: { $addToSet: "$taxonomies.tags" } }} )
這應該在SM
和AM
(以及任何其他)上分組:
[
{
"_id" : "SM",
"tags" : [
[
"d1",
"e1"
],
[
"d",
"e"
]
]
},
{
"_id" : "AM",
"tags" : [
[
"a1",
"b1",
"c1"
],
[
"a",
"b",
"c"
]
]
}
]
您也可以使用$match
來過濾特定name
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.