gpt4 book ai didi

MongoDB聚合项目字段为条件值

转载 作者:行者123 更新时间:2023-12-01 23:16:44 25 4
gpt4 key购买 nike

我尝试将我最新的聚合工件投影到一个新的工件中,该工件带有一个附加字段,其值应该是有条件的。

我最新的聚合管道工件是:

[
server: {
_id: 6108d87b9255993b26796ca9,
version: '2.0.366',
name: 'aaaaaa',
variables: [
{
key: 'aKey',
value: 'aVal',
},
{
key: 'bKey',
value: 'bVal',
},
{
key: 'cKey',
value: 'cVal',
}
],
__v: 0
}
]

所以基本上我想用一个名为 bucketName 的附加字段来投影附加工件。

我想检查 variables 数组,是否有一个项目,其键值 aKey 是预先知道的。如果是这样,预计 bucketName 的结果将是 value 字段:aVal。如果找不到,则值为 NOT_FOUND

所以上面示例的结果将是:

[
server: {
_id: 6108d87b9255993b26796ca9,
version: '2.0.366',
name: 'aaaaaa',
variables: [
{
key: 'aKey',
value: 'aVal',
},
{
key: 'bKey',
value: 'bVal',
},
{
key: 'cKey',
value: 'cVal',
}
],
bucketName: 'aVal',
__v: 0
}
]

我的尝试是:

{
$project: {
bucketName: {
$cond: {
if: {
$eq : ['$server.variables.key', 'aKey'],
},
then: '$server.variables.value',
else: 'NOT_FOUND',
},
},
},
},

但这并没有正确地进行查询。

最佳答案

您应该使用 $in 运算符,因为此 variables 键是数组:

然后,在 then 中也使用 $filter 来提取该值。

db.collection.aggregate([
{
"$set": {
"bucketName": {
"$cond": {
"if": {
"$in": [
"aKey",
"$server.variables.key"
]
},
"then": {
"$filter": {
"input": "$server.variables",
"as": "variable",
"cond": {
"$eq": [
"$$variable.key",
"aKey"
]
}
},

},
"else": "NOT_FOUND"
}
}
},

},
{
"$unwind": "$bucketName",

},
{
"$project": {
"bucketName": "$bucketName.value",
"server": 1
}
}
])

关于MongoDB聚合项目字段为条件值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68722250/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com