簡體   English   中英

如何使用參考字段值更新文檔字段?

[英]How to update document field with reference field value?

實際上有2個文檔:歷史記錄和子公司,但我忘記在歷史記錄中添加子公司名稱。

歷史記錄文件:

{
    "_id" : ObjectId("59480f91ba4d070b882ff924"),
    "subsidiary" : ObjectId("5947fdf3ba4d070b882ff851"),
    "campaignTitle" : "Prueba Autoredeeem",
    "campaignId" : ObjectId("5948004fba4d070b882ff886"),
}

子公司文件

{
    "_id" : ObjectId("5947fdf3ba4d070b882ff851"),
    "loginId" : 50174,
    "name" : "Sucursal Alpha",
}

現在,我需要更新歷史記錄文檔 ,並從子公司文檔中添加一個具有“ Subsidiary.name”值的“ subsidiaryName”字段

這是我的第一個方法:

db.getCollection('couponredeemhistories')
   .updateMany({}, {$set: {subsidiaryName: 
                   db.getCollection('subsidiaries')
                   .findOne({"_id": ObjectId('5947fdf3ba4d070b882ff851')}, {_id: 0,name: 1})}})

但是,結果為我提供了一個在substantialName中的對象,而不是純文本。

{
    "_id" : ObjectId("59480f91ba4d070b882ff924"),
    "subsidiary" : ObjectId("5947fdf3ba4d070b882ff851"),
    "campaignDescription" : "",
    "campaignTitle" : "Prueba Autoredeeem",
    "campaignId" : ObjectId("5948004fba4d070b882ff886"),
    "subsidiaryName" : {
        "name" : "Sucursal Alpha"
    }
}

然后,我有兩個問題:

  1. 如何僅將純文本值設置為subscriberName字段? R:在項目中添加.name以獲取純文本

  2. 如何為當前文檔而不是ObjectId('HARD CODE')設置.findOne()“ id”參數? R:使用forEach游標進行迭代

重要限制:這適用於MongoDB Shell(MongoDB 3.4)

謝謝您,請支持我解決此問題上的所有語言問題。

感謝@Astro更新答案:

db.getCollection('couponredeemhistories').find()
.forEach(function(doc){
    if(doc.subsidiary !== undefined){
        doc.subsidiaryName = db.getCollection('subsidiaries').findOne({'_id': doc.subsidiary}, {_id: 0, name: 1}).name;
        db.getCollection('couponredeemhistories').save(doc);
    }
    })

嘗試這個:

db.getCollection('couponredeemhistories')
   .updateMany({}, {$set: {subsidiaryName: 
                   db.getCollection('subsidiaries')
                   .findOne({"_id": ObjectId('5947fdf3ba4d070b882ff851')}, {_id: 0,name: 1}).name}})

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM