簡體   English   中英

通過mongo聚合管道兩次使用$ match

[英]Using $match twice through mongo aggregation pipeline

我在嘗試從mongoDB聚合管道中獲取一些結果時遇到了一個問題。 這是我的數據庫的樣子:

var dbSchema = mongoose.Schema({
    identity: Number,
    parametres: {
        style: {
            fuel: [styleSchema],
            gasoline: [styleSchema],        
            },
        },

這是styleSchema的樣子:

var styleSchema = new mongoose.Schema({
   date: Date,
   value: Number,
   type: String,
});

我正在嘗試提取“燃料”和“汽油”中屬於某種“類型”的所有對象。

我試圖用concatArray將它們組合在一個唯一的數組中,然后通過以下方式匹配我想要的“類型”:

db.aggregate([

  {$match:
      {'identity':3,
   }},
  {$project: {all: {$concatArrays: ['$parametres.style.fuel','$parametres.style.gasoline']} }},

  {$match: {'$all.type': 'example'}},

在第二次嘗試匹配之前,我有一個唯一的數組(“ all”),並且嘗試匹配其中的某些內容,但是沒有任何效果(我也嘗試了“ all.type”)...

我可能是個初學者,所以我可能誤解了我必須使用“匹配”查詢的方式,因此,感謝您的寶貴時間和解答,

亞瑟

db.aggregate([
        {
            $match:{identity:3}
        },
       {
            $project: {all: {$concatArrays: ['$parametres.style.fuel','$parametres.style.gasoline']} }
       },
       {$unwind: "$all"},
       {$match: {"all.type": 'example'}},
       {$group : {_id: null, all:{$push:"$all"}}}
    ])

可能您正在嘗試執行此類操作。 在聚合操作中, $是在右側用:提字段名稱和左側提操作。 因此,當您在左側使用“ $ all.type”時, MongoDB會將其視為在Mongodb運算符列表中不可用的運算符。

另一件事是,當您對array進行任何查詢時。 如果至少一個元素符合條件,則Mongodb會發回完整數組。 因此,在執行任何查詢之前,我們需要使用$unwind運算符對數組進行解構。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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