MongoDB mongoose $lookup 不在数组中。
Posted
技术标签:
【中文标题】MongoDB mongoose $lookup 不在数组中。【英文标题】:MongoDB mongoose $lookup not in array. 【发布时间】:2018-08-16 15:31:39 【问题描述】:我使用以下查询:
Collection
.aggregate([
$project : follow_count: $size: "$ifNull": [ "$follow_users", [] ]
,
$lookup: from: 'models', localField: '_id', foreignField: '_id', as: 'model',
])
获取这种 JSON:
[
"_id": "1234565434567",
"follow_count": 3,
"model": [
"_id": "1234565434567",
"make": "Make1",
"name": "Model1",
"price": 15200,
]
,
"_id": "123456789",
"follow_count": 2,
"model": [
"_id": "123456789",
"make": "Make2",
"name": "Model2",
"price": 12000,
]
]
有没有办法不将 $lookup 结果推送到数组中以获得这样的 JSON? 我更喜欢在查询后不使用循环,所以我正在寻找一种优化的方式。
[
"_id": "1234565434567",
"follow_count": 3,
"make": "Make1",
"name": "Model1",
"price": 15200,
,
"_id": "123456789",
"follow_count": 2,
"make": "Make2",
"name": "Model2",
"price": 12000,
]
【问题讨论】:
尝试使用 $unwind 或 $project 【参考方案1】:3.6版本可以使用$mergeObject
操作符。
$mergeObject
将合并的集合字段与其他字段合并,然后$replaceRoot
将合并的文档提升到顶层。
$project
排除以删除 model
字段。
在$lookup
之后添加以下阶段
[
"$replaceRoot":
"newRoot":
"$mergeObjects": [
"$arrayElemAt": [
"$model",
0
]
,
"$$ROOT"
]
,
"$project":
"model": 0
]
【讨论】:
以上是关于MongoDB mongoose $lookup 不在数组中。的主要内容,如果未能解决你的问题,请参考以下文章
Mongoose.aggregate(pipeline) 使用 $unwind、$lookup、$group 链接多个集合
Mongoose:$lookup 后的 $project 不显示字段