我在尝试从mongoDB聚合管道获取一些结果时遇到了问题。 这就是我的数据库的样子:
var dbSchema = mongoose.Schema({
identity: Number,
parametres: {
style: {
fuel: [styleSchema],
gasoline: [styleSchema],
},
},
以下是styleSchema的样子:
var styleSchema = new mongoose.Schema({
date: Date,
value: Number,
type: String,
});
我试图提取“燃料”中的所有物品。和'汽油'这是某种类型的'。
我尝试将这两个组合在一个带有concatArray的唯一数组中,然后匹配'类型'我想要:
db.aggregate([
{$match:
{'identity':3,
}},
{$project: {all: {$concatArrays: ['$parametres.style.fuel','$parametres.style.gasoline']} }},
{$match: {'$all.type': 'example'}},
在第二次尝试匹配之前,我有一个独特的阵列('所有')我尝试匹配它上面的一些东西,但没有任何作用(我已经尝试过了) ' all.type'还)...
我可能误解了我必须使用'匹配'查询我是初学者,所以感谢您的时间和答案,
亚瑟
答案 0 :(得分:0)
db.aggregate([
{
$match:{identity:3}
},
{
$project: {all: {$concatArrays: ['$parametres.style.fuel','$parametres.style.gasoline']} }
},
{$unwind: "$all"},
{$match: {"all.type": 'example'}},
{$group : {_id: null, all:{$push:"$all"}}}
])
可能你正试图做这样的事情。
在汇总操作中,$
在:
的右侧用于提及字段名称,在左侧用于提及运算符。
所以当你使用" $ all.type"在左侧MongoDB
将其视为Mongodb运算符列表中不可用的运算符。
另一件事是当您对array
进行任何查询时。如果元素的至少一个匹配条件,则Mongodb发回完整数组。因此,在进行任何查询之前,我们需要使用$unwind
运算符来解构数组。