Javascript 使用条件减少mongodb聚合
我有一个名为“extra”的对象数组,它们具有不同的属性:有些对象具有“plus”,有些则没有。 我想在这个“额外”数组中创建两个不同的数组,一个称为“廉价”数组,其中包含所有不具有“加”属性的对象,另一个称为“exp”数组,其中仅包含具有“加”属性的对象。 我想我可以在mongodb聚合中使用$reduce方法和$concatarray,并使用$cond检查属性plus是否存在。 诸如此类: 数据示例:Javascript 使用条件减少mongodb聚合,javascript,mongodb,aggregation-framework,reduce,Javascript,Mongodb,Aggregation Framework,Reduce,我有一个名为“extra”的对象数组,它们具有不同的属性:有些对象具有“plus”,有些则没有。 我想在这个“额外”数组中创建两个不同的数组,一个称为“廉价”数组,其中包含所有不具有“加”属性的对象,另一个称为“exp”数组,其中仅包含具有“加”属性的对象。 我想我可以在mongodb聚合中使用$reduce方法和$concatarray,并使用$cond检查属性plus是否存在。 诸如此类: 数据示例: { extra: [ { descript
{
extra: [
{
description: "laces",
type: "exterior",
plus: '200'
},
{
description: "sole",
type: "interior"
},
{
description: "logo",
type: "exterior"
},
{
description: "stud",
type: "exterior",
plus: '450'
}
],
}
它不起作用…我尝试了很多方法,或者写了$cond部分,但运气不好。
我想不出来。
谢谢大家。
K.除了一些小的语法问题之外,还有一个问题是您对
$ne
运算符的理解
在这种情况下,您希望缺少的值等于null
,这不是Mongo的工作方式。因此,对于一份文件:
{ name: "my name" }
聚合查询:
{$cond:{$eq:[“$missingField”,null]}
将不会如您所期望的那样为true,因为missing不等于null
。我冒昧地修复了您遇到的语法问题,这条工作管道就是一条出路:
db.collection.aggregate([
{
$project: {
extra: {
$reduce: {
input: "$extra",
initialValue: {
cheap: [],
exp: []
},
in: {
cheap: {
"$concatArrays": [
"$$value.cheap",
{
$cond: [
"$$this.plus",
[],
[
"$$this"
],
]
}
]
},
exp: {
"$concatArrays": [
"$$value.exp",
{
$cond: [
"$$this.plus",
[
"$$this"
],
[]
]
}
]
}
}
},
},
},
}
])
<>请注意,<代码> $COND >评估<代码> Plus 字段,这意味着如果字段确实存在“<代码> null <代码>值或<代码> 0代码/>值,那么它将考虑该文件与
db.collection.aggregate([
{
$project: {
extra: {
$reduce: {
input: "$extra",
initialValue: {
cheap: [],
exp: []
},
in: {
cheap: {
"$concatArrays": [
"$$value.cheap",
{
$cond: [
"$$this.plus",
[],
[
"$$this"
],
]
}
]
},
exp: {
"$concatArrays": [
"$$value.exp",
{
$cond: [
"$$this.plus",
[
"$$this"
],
[]
]
}
]
}
}
},
},
},
}
])