簡體   English   中英

貓鼬獨特的條件不起作用

[英]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" } }} )

這應該在SMAM (以及任何其他)上分組:

 [
     {
             "_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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM