簡體   English   中英

文檔中的MongoDB Update數組

[英]MongoDB Update array in a document

我嘗試使用此查詢更新多個文檔的數組:

db.BusinessRequest.update({"DealTypes": { $exists: true }, "DealTypes.DisplayName": "Minority trade sale" }, {$set:{"DealTypes.$.DisplayName":"Minority"}}, false,true );

但是當存在匹配項時,它只會更新數組的第一行,而displayName與第一行不匹配。

我使用MongoChef軟件的IntelliShell。

我的文檔如下所示:

{ 
"_id" : BinData(4, "IKC6QJRGSIywmKTKKRfTHA=="), 
"_t" : "InvestorBusinessRequest", 
"Title" : "Business Request 000000002", 
"DealTypes" : [
    {
        "_id" : "60284B76-1F45-49F3-87B5-5278FF49A304", 
        "DisplayName" : "Majority", 
        "Order" : "001"
    }, 
    {
        "_id" : "64A52AFE-2FF5-426D-BEA7-8DAE2B0E59A6", 
        "DisplayName" : "Majority trade sale", 
        "Order" : "002"
    }, 
    {
        "_id" : "C07AE70D-4F62-470D-BF65-06AF93CCEBFA", 
        "DisplayName" : "Minority trade sale", 
        "Order" : "003"
    }, 
    {
        "_id" : "F5C4390A-CA7D-4AC8-873E-2DC43D7F4158", 
        "DisplayName" : "Equity fund raising", 
        "Order" : "004"
    }
]

}

請問我該如何實現? 提前致謝

編輯:這行工作:

db.BusinessRequest.update({"DealTypes": { $exists: true }, "DealTypes": { $elemMatch: {"DisplayName": "Majority trade sale"}}}, {$set:{"DealTypes.$.DisplayName":"Majority"}}, false,true );

請嘗試這個:

db.BusinessRequest.find().forEach( function(doc) {
  do {
    db.BusinessRequest.update({{"DealTypes": { $exists: true }, "DealTypes.DisplayName": "Minority trade sale" },
                         {$set:{"DealTypes.$.DisplayName":"Minority"}});
  } while (db.getPrevError().n != 0);
})

要么

您不能在單個更新操作中修改多個數組元素。 因此,您必須重復更新才能遷移需要修改多個數組元素的文檔。 您可以通過遍歷集合中的每個文檔,使用$elemMatch重復應用更新,直到文檔中所有相關注釋都被替換為止,來執行此操作。

db.BusinessRequest.update({"DealTypes": { $exists: true }, "DealTypes": { $elemMatch: {"DisplayName": "Majority trade sale"}}}, {$set:{"DealTypes.$.DisplayName":"Majority"}}, false,true );

如果您需要提高搜索效率,則建議您規范化架構,其中每一行都保存在單獨的文檔中。

請在您的mongo shell中執行以下腳本:

db.BusinessRequest.find({"DealTypes":{$exists:true}}).forEach(function(item)
{

for(i=0;i < item.DealTypes.length;i++)
{
    if(item.DealTypes[i].DisplayName === 'Minority trade sale'){
        item.DealTypes[i].DisplayName = 'Minority';
    }
}
db.BusinessRequest.save(item);
});

更新中的最后兩個參數有問題。

這是mongodb中update()方法的形式

db.collection.update(
   <query>,
   <update>,
   {
     upsert: <boolean>,
     multi: <boolean>,
     writeConcern: <document>
   }
)

我相信您的更新應該像這樣;

db.BusinessRequest.update
( {"DealTypes": { $exists: true }, "DealTypes.DisplayName": "Minority trade sale" }
, {$set:{"DealTypes.$.DisplayName":"Minority"}}
{ upsert : false, multi : true });

暫無
暫無

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

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