我的 mongo 文档中有以下架构:
{
//more stuff
arrayExample:[
{
//more stuff as well
field1: "foo"
},
{
//more stuff as well
field1: "foo"
},
{
//more stuff as well
field1: "foo"
},
//...
]
}
我想要做的是向 id: ObjectId()
内的 每个 元素添加一个字段 arrayExample
,这样我就可以有如下内容:
{
//more stuff
arrayExample:[
{
//more stuff as well
field1: "foo",
id: 1
},
{
//more stuff as well
field1: "foo",
id: 2
},
{
//more stuff as well
field1: "foo",
id: 3
},
//...
]
}
我尝试通过使用 map 的聚合来做到这一点,但它并没有像我那样工作。有没有办法做到这一点?非常感谢
答案 0 :(得分:1)
不幸的是,聚合中没有内置方法来生成 ObjectId(目前)。
但是,您可以使用 $function
运算符并编写自定义代码来执行此操作。
注意:使用 $function
方法会显着影响性能
此外,$function
运算符仅适用于 MongoDB 4.4 及更高版本
以下示例代码适用于 Mongo Shell。通过函数方法中的自定义 JS 代码将 ObjectId()
部分转换为自动 ObjectId 生成器。
db.collection.aggregate([
{
"$project": {
"arrayExample": {
"$map": {
"input": "$arrayExample",
"in": {
"$mergeObjects": [
"$$this",
{
"$function": {
"body": "function() { return {'id': ObjectId()}; }",
"args": [],
"lang": "js",
},
},
],
},
}
}
},
}
])