当前位置: 首页 > 知识库问答 >
问题:

在mongoDB中将一个字段从一个集合复制到另一个集合,外键作为混合类型

阎宝
2023-03-14

虽然我在stackOverFlow MongoDB上发现了类似的问题,但使用外键将字段复制到另一个集合

我想将字段名称从集合中复制到集合中,其中userdetails中的userId等于user中的\u 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}});
}
);

此查询部分工作。它只更新user文档,其中_id是字符串类型。_id为ObjectId的用户文档不会更新。

共有1个答案

左博学
2023-03-14

请检查您的文档\u id(因为在您的示例中,某些\u id不是有效的文档\u id。例如,c21d580ea3ca5c7a1664bd5feb57f0c8,而不是mongo \u 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
            }
        )
    })

})

如果你有任何问题请尽管问

 类似资料:
  • 我有一个问题,但在我看来,我看到的所有解决方案都在解决一个比我更复杂的问题。 我对MongoDB比较陌生,但我一直在将它与Apache Neach一起使用来存储抓取的文档。由于我分阶段抓取,并以不同的方式评估每个抓取的结果,以获取统计数据,因此我一直将结果存储在不同的集合中。 我所要做的就是把这些收藏放在一起成为一个大的收藏,这样我就可以翻译和分类。所有字段都是相同的,因此我不需要添加任何新字段。

  • 我知道有一种方法可以实现db。收集getIndexes(),它将列出为集合定义的所有索引。有没有办法将这些索引定义复制并创建到另一个集合? 有很多,我不想一个接一个地做。 关于重复的问题评论:我不希望复制收藏。我希望以可以应用于另一个集合的格式导出索引。

  • userId是users集合中用户的_id字段。每个用户还有一个名字和一个电子邮件字段。 如何为ResearchThread.Pending.Collaborators对象数组中的每个用户将用户集合中的名称和电子邮件字段填充到此文档中?而且,当在模板中使用时,填充的数据会是反应性的吗?

  • 我所处的情况是,当用户付款时,存储在Firestore集合(CartProducts)中的购物车产品应移动到名为SuccessFullOrders的新集合。 因此,我的基本问题是如何在Flutter中将所有文档从一个集合移动到Firestore的另一个集合 我不知道如何在flutter中编写代码。谢谢你的回答 这是我的代码

  • 有没有一个简单的方法可以做到这一点?

  • 我使用的是Vue.js和Firebase FiRecovery。现在我有两个集合和。在订单集合中,我已经存储了集合的每个文档的id。我现在必须从中获取相应用户的详细信息。我应该怎么做?这是我迄今为止所做的 我需要在userInfo中存储用户数据。提前谢谢