簡體   English   中英

如何結合 Mongo $in 和 $cond

[英]How to combine Mongo $in and $cond

我有一個看起來像這樣的集合(每個數組元素是 1 個文檔):

[
    {
        "_id": 1,
        "title": "title",
        "data": [
            {
                "_id": 41,
                "name": "test 1"
            },
            {
                "_id": 42,
                "name": "test 2"
            },
            {
                "_id": 43,
                "name": "test 3"
            }
        ]
    },
    {
        "_id": 1,
        "title": "title 2",
        "data": [
            {
                "_id": 44,
                "name": "test 4"
            },
            {
                "_id": 45,
                "name": "test 5"
            }
        ]
    },
]

我想做的是使用$redact redact 過濾掉所有文檔,其中 data._id 是$in [41, 42]的數組。 因此,如果 data._id 曾經等於 41 或 42,則應保留整個文檔。 否則,它應該被修剪。

{
    $cond: {
        if: {
            $in: [
                "$data._id",
                [ 41, 42 ]
            ]
        },
        then: "$$KEEP",
        else: "$$PRUNE"
    }
}

但是,當我在 Compass 中使用$redact階段時,上面的查詢不會返回任何內容。

我認為您缺少 $redact 聚合,除了查詢看起來不錯https://www.mongodb.com/docs/manual/reference/operator/aggregation/in/

{ 
  $redact: {
    $cond: {
      if: {
        $in: [
          "$data._id",
          [ 41, 42 ]
        ]
      },
      then: "$$KEEP",
      else: "$$PRUNE"
    }
  }
}

暫無
暫無

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

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