【发布时间】:2019-04-15 02:32:39
【问题描述】:
虽然我在stackOverFlow MongoDB copy a field to another collection with a foreign key 找到了类似的问题
我想将字段 name 从 userdetails 集合复制到 user 集合,其中 userDetails 中的 userId 等于用户中的 _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 的用户文档没有得到更新。
【问题讨论】:
-
Ye Olde JavaScript hack。
{ _id: new ObjectId(x.userId.valueOf()) }因为valueOf()将返回“字符串”,无论是字符串还是ObjectId。当然,我们正在投射到ObjectId。强烈建议您实际上至少将所有_id值标准化为ObjectId。这意味着删除不存在的文档,因为_id是不可变的。
标签: database mongodb mongodb-query