gpt4 book ai didi

node.js - 有没有办法在维护数据的同时更改 mongoDB 结构(从嵌套/嵌入文档到对象引用列表)?

转载 作者:搜寻专家 更新时间:2023-10-30 20:52:59 24 4
gpt4 key购买 nike

我有一个 mongoDB 数据库,由 nodejs 通过 mongoose 使用,它涉及嵌套/嵌入文档,如下所示:

"people" : [
{"name" : "james", "_id": ObjectId("randomrandom1")},
{"name" : "arianna","_id": ObjectId("randomrandom2")},
{"name" : "kyle","_id": ObjectId("randomrandom3")}
]

我需要更改结构,以便我有单独的“人员”文档,人员将包含人员的 ObjectId 数组:

"people" : [{type:mongoose.Schema.Types.ObjectId, ref: 'Person'}]

并且每个“人”文档都将包含 james、arianna 和 kyle 的信息 - 以便我可以在需要时填充它们。

我需要更改数据库结构,同时维护已输入的文档。有什么办法可以实现吗?

最佳答案

假设我的文档在名为 coll 的集合中,如下所示

{
"_id" : ObjectId("56b47c7a088d9fa3e1aa77a0"),
"people" : [
{
"name" : "james",
"_id" : ObjectId("56b47c7a088d9fa3e1aa779d")
},
{
"name" : "arianna",
"_id" : ObjectId("56b47c7a088d9fa3e1aa779e")
},
{
"name" : "kyle",
"_id" : ObjectId("56b47c7a088d9fa3e1aa779f")
}
]
}

现在我可以像这样使用 aggregate 聚合将所有 _id 存储在另一个集合中

db.coll.aggregate([
{
$project: {
_id : 0,
'people._id' : 1
}
},
{
$out : 'somecoll'
}
])

这会将所有 ID 存储在另一个名为 somecoll 的集合中,如下所示:

{
"_id" : ObjectId("56b47de8b47e47b58b64f312"),
"people" : [
{
"_id" : ObjectId("56b47c7a088d9fa3e1aa779d")
},
{
"_id" : ObjectId("56b47c7a088d9fa3e1aa779e")
},
{
"_id" : ObjectId("56b47c7a088d9fa3e1aa779f")
}
]
}

关于node.js - 有没有办法在维护数据的同时更改 mongoDB 结构(从嵌套/嵌入文档到对象引用列表)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35220033/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com