AddField object 数组使用聚合
AddField an array of object using Aggregate
假设我想从我的 collection 得到一个 object,然后到这个 object,我想添加一个 属性 来存储一个数组object 包含与我的 object(在我的案例系列中)的 属性 之一匹配的 ID 和标题。
示例 object 作为我初始查询的结果
{
_id: 13123123123,
title: "TitleofObject",
series: "SeriesName",
}
然后我想查看相同的 collection,其中系列名称与我的 object 相同(添加一个名为 sameSeries 的新 属性 来存储 object s 匹配系列)和 object 的最终结果应该看起来像这样
_id: 13123123123,
title: "TitleofObject",
series: "SeriesName",
sameSeries:
[
{
_id: 12312312,
title: "anothertitleofObject"
},
{
_id: 12312342312,
title: "anothertitleofObject2"
}
]
如何使用聚合方法实现此目的?
const book = await Book.aggregate([
{
$match: { _id: id }
},
])
db.collection.aggregate([
{
"$group": { //Group by series
"_id": "$series",
"sameSeries": { //Create an object
$push: { //push the required fields
"title": "$title",
"_id": "$_id"
}
}
}
}
])
db.collection.aggregate([
{
"$match": {
"_id": 13123123123,
"sameSeries": {
"$exists": false
}
}
},
{
"$lookup": {
"from": "collection",
"localField": "series",
"foreignField": "series",
"as": "sameSeries"
}
}
])
要跳过parent id,可以做一个slice
db.collection.aggregate([
{
"$match": {
"_id": 13123123123,
}
},
{
"$lookup": {
"from": "collection",
"localField": "series",
"foreignField": "series",
"as": "sameSeries"
}
},
{
"$project": {
_id: 1,
series: 1,
title: 1,
sameSeries: {
"$slice": [
"$sameSeries",
-1
]
}
}
}
])
假设我想从我的 collection 得到一个 object,然后到这个 object,我想添加一个 属性 来存储一个数组object 包含与我的 object(在我的案例系列中)的 属性 之一匹配的 ID 和标题。
示例 object 作为我初始查询的结果
{
_id: 13123123123,
title: "TitleofObject",
series: "SeriesName",
}
然后我想查看相同的 collection,其中系列名称与我的 object 相同(添加一个名为 sameSeries 的新 属性 来存储 object s 匹配系列)和 object 的最终结果应该看起来像这样
_id: 13123123123,
title: "TitleofObject",
series: "SeriesName",
sameSeries:
[
{
_id: 12312312,
title: "anothertitleofObject"
},
{
_id: 12312342312,
title: "anothertitleofObject2"
}
]
如何使用聚合方法实现此目的?
const book = await Book.aggregate([
{
$match: { _id: id }
},
])
db.collection.aggregate([
{
"$group": { //Group by series
"_id": "$series",
"sameSeries": { //Create an object
$push: { //push the required fields
"title": "$title",
"_id": "$_id"
}
}
}
}
])
db.collection.aggregate([
{
"$match": {
"_id": 13123123123,
"sameSeries": {
"$exists": false
}
}
},
{
"$lookup": {
"from": "collection",
"localField": "series",
"foreignField": "series",
"as": "sameSeries"
}
}
])
要跳过parent id,可以做一个slice
db.collection.aggregate([
{
"$match": {
"_id": 13123123123,
}
},
{
"$lookup": {
"from": "collection",
"localField": "series",
"foreignField": "series",
"as": "sameSeries"
}
},
{
"$project": {
_id: 1,
series: 1,
title: 1,
sameSeries: {
"$slice": [
"$sameSeries",
-1
]
}
}
}
])