通过 mongo 聚合管道使用 $match 两次
Posted
技术标签:
【中文标题】通过 mongo 聚合管道使用 $match 两次【英文标题】:Using $match twice through mongo aggregation pipeline 【发布时间】:2018-03-21 18:26:39 【问题描述】:我在尝试从 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'),我尝试匹配它上面的一些东西,但没有任何效果(我也尝试过'all.type').. .
由于我是初学者,我可能误解了我必须使用“匹配”查询的方式,所以感谢您的时间和您的回答,
亚瑟
【问题讨论】:
【参考方案1】: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
运算符来解构数组。
【讨论】:
以上是关于通过 mongo 聚合管道使用 $match 两次的主要内容,如果未能解决你的问题,请参考以下文章