我有一个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个已批准的值。
尝试这个:
db.collection.aggregate({
$addFields: {
Sales: {
$filter: {
input: "$Sales",
cond: {
$in: [
"Approved",
"$$this.Action"
]
}
}
}
}
})
您可以使用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"
]
}
]
}
我希望这会有所帮助。