gpt4 book ai didi

database - 将外键作为混合类型的字段从一个集合复制到另一个集合

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

尽管我在 stackOverFlow 上发现了类似的问题 MongoDB copy a field to another collection with a foreign key

我想从 userdetails 集合中复制一个字段 nameuser 集合,其中 userDetails 中的 userId 等于 user 中的 _id。

用户集合

{                                                                                                                                                                                                            
"_id" : ObjectId("5b97743bbff66e0be66283cc"),
"username" : "mmi_superadmin",
"accId" : "acc1"
}
{
"_id" : "c21d580ea3ca5c7a1664bd5feb57f0c8",
"username" : "client",
"accId" : "acc1"
}

userDetail 集合

{
"_id" : ObjectId("5b97743bbff66e0be66283cd"),
"userId" : "5b97743bbff66e0be66283cc",
"name" : "mmi_superadmin"
}
{
"_id" : "5bab8a60ef86bf90f1795c44",
"userId" : "c21d580ea3ca5c7a1664bd5feb57f0c8",
"name" : "RAHUL KUMAR TIWARI"
}

这是我的查询:

db.userDetails.find().forEach(
function(x) {
db.user.update( {_id :x.userId}, {$set: {name:x.name}});
}
);

此查询部分有效。它只更新 _id 为字符串类型的 user 文档。 _id 作为 ObjectId 的用户文档没有得到更新。

最佳答案

请检查您的文档 _id(因为在您的示例中某些 _id 不是有效的文档 _id。例如 c21d580ea3ca5c7a1664bd5feb57f0c8 不是 mongo _id)并使用此查询:

let usersIds = [];
db.user.find({"_id": {$type: 7}}).forEach(doc => {
usersIds.push(doc._id + '')

db.userDetail.find({
userId: {
$in: usersIds
}
}).forEach(doc => {
db.user.update(
{
"_id": ObjectId(doc.userId)
},
{
$set: {
"name": doc.name
}
},
{
multi: false,
upsert: false
}
)
})

})

如果你有任何问题随时问

关于database - 将外键作为混合类型的字段从一个集合复制到另一个集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53261010/

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