簡體   English   中英

MongoDB $cond 與嵌入式文檔數組

[英]MongoDB $cond with embedded document array

我正在嘗試生成一個帶有字段“desc”的新集合,同時考慮到文檔數組中字段的條件。 為此,我使用$cond語句

源集合示例是下一個:

{
        "_id" : ObjectId("5e8ef9a23e4f255bb41b9b40"),
        "Brand" : {
                "models" : [
                        {
                                "name" : "AA"
                        },
                        {
                                "name" : "BB"
                        }
                ]
        }
}
{
        "_id" : ObjectId("5e8ef9a83e4f255bb41b9b41"),
        "Brand" : {
                "models" : [
                        {
                                "name" : "AG"
                        },
                        {
                                "name" : "AA"
                        }
                ]
        }
}

查詢是下一個:

db.runCommand({
    aggregate: 'cars',
    'pipeline': [
        {
            '$project': {
                'desc': {
                    '$cond': {
                        if: {
                            $in: ['$Brand.models.name',['BB','TC','TS']]
                        },
                        then: 'Good',
                        else: 'Bad'
                    }
                }
            }
        },
        {
            '$project': {
                'desc': 1
            }
        },
        {
            $out: 'cars_stg'
        }
    ],
    'allowDiskUse': true,
})

問題是$cond語句總是返回“else”值。 我也嘗試過使用$eq$and使用$ne$or語句,但總是返回“else”。

我做錯了什么,或者我應該如何解決這個問題?

謝謝

由於$Brand.models.name返回一個數組,我們不能使用$in運算符。

相反,我們可以使用$setIntersection返回一個數組,該數組包含出現在每個輸入數組中的元素

db.cars.aggregate([
  {
    "$project": {
      "desc": {
        "$cond": [
          {
            $gt: [
              {
                $size: {
                  $setIntersection: [
                    "$Brand.models.name",
                    [
                      "BB",
                      "TC",
                      "TS"
                    ]
                  ]
                }
              },
              0
            ]
          },
          "Good",
          "Bad"
        ]
      }
    }
  },
  {
    "$project": {
      "desc": 1
    }
  },
  {
      $out: 'cars_stg'
  }
])

Mongo游樂場| 替代$reduce

暫無
暫無

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

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