我有一个mongodb JSON数据,我想找到完全匹配的词“已批准”

问题描述 投票:0回答:2

我有一个Mongodb数据,我想在名为“ Sales.Action”的数组中找到完全匹配的单词“ Approved”。

但是该数组还包含除“ Approve”值之外的其他值,当我查询时也会返回该值。

我只想返回一个动作。

{
"Sales" : [
    {
        "Action" : [
            "Approved"
        ],
        "Log" : [
            "Created on: 04/20/2020 42:04:04"
        ]
    },
    {
        "Action" : [
            "Approve",
            "Decline",
            "Edit",
            "Remarks"
        ],
        "Log" : [
            "Created on: 04/20/2020 42:04:04"
        ]
    },
    {
        "Action" : [
            "Approve",
            "Decline",
            "Edit",
            "Remarks"
        ],
        "Log" : [
            "Created on: 04/21/2020 412:04:04"
        ]
    },
    {
        "Action" : [
            "Approve",
            "Decline",
            "Edit",
            "Remarks"
        ],
        "Log" : [
            "Created on: 04/21/2020 412:04:04"
        ]
    },
    {
        "Action" : [
            "Approve",
            "Decline",
            "Edit",
            "Remarks"
        ],
        "Log" : [
            "Created on: 04/23/2020 44:04:04"
        ]
    }
]

}

但是我只需要返回1个已批准的值。

arrays mongodb mongodb-query
2个回答
0
投票

尝试这个:

db.collection.aggregate({
  $addFields: {
    Sales: {
      $filter: {
        input: "$Sales",
        cond: {
          $in: [
            "Approved",
            "$$this.Action"
          ]
        }
      }
    }
  }
})

MongoPlayground


-1
投票

您可以使用filter运算符。我认为该集合的名称为sales

db.sales.aggregate({
    $project: {
    Sales: {
        $filter: {
            input:'$Sales', as: 'sales', cond: {$eq: ['$$sales.Action', ['Approved']]}}
        }
    }
}).pretty()

上面的输出是:

{
    "_id" : ObjectId("5ea47a863873d6e16c0f7aac"),
    "Sales" : [
        {
            "Action" : [
                "Approved"
            ],
            "Log" : [
                "Created on: 04/20/2020 42:04:04"
            ]
        }
    ]
}

我希望这会有所帮助。

© www.soinside.com 2019 - 2024. All rights reserved.