簡體   English   中英

如何遷移修改MongoDB中的對象數組集合?

[英]How to migrate modify a collections of object array in mongodb?

我有以下模式貓鼬,但有一個帶有集合的生產應用程序。 這是一個更大的問題的簡化,為了更好地理解而減少。

這只是一個基本示例。

export const ListSchema = new Schema({
  listaItemsIds: [
    {
        type: Schema.Types.ObjectId,
        ref: 'Items',
        default: [],
    },
  ],
});

我需要將所有數據遷移到以下模型。

export const ListSchema = new Schema({
  listaItemsIds: [
    {
      item: {
        type: Schema.Types.ObjectId,
        ref: 'Items',
        default: [],
      },
      property1: {
        type: Number,
        required: false,
        default: 0,
      },
      property2: {
        type: Number,
        required: false,
        default: 0,
      },
    },
  ],
});

以下文件

{
        "_id" : ObjectId("62bade11ff94fb9e5a0f5236"),
        "listaItemsIds" : [
                ObjectId("62a118a9167d269d38a4c806"),
                ObjectId("62baef0cff94fb9e5a0f53e3"),
                ObjectId("627bb4d61119d5ce2201b7df")
        ],
        "__v" : 37
}

有必要改造

{
        "_id" : ObjectId("62bade11ff94fb9e5a0f5236"),
        "listaItemsIds" : [
                {
                    item:ObjectId("62a118a9167d269d38a4c806"),
                    property1:55,
                    property2:75,
                },
                {
                    item:ObjectId("62baef0cff94fb9e5a0f53e3"),
                    property1:55,
                    property2:75,
                },
                {
                    item:ObjectId("627bb4d61119d5ce2201b7df"),
                    property1:55,
                    property2:75,
                },              
        ],
        "__v" : 37
}

我嘗試了以下代碼片段,但沒有結果。

db.ListSchemas.updateMany({},
    [
    {$set: {"listaItemsIds.$[elem]":
    {
      item:"listaItemsIds.$[elem]",
      property1:0,
      property2:0,
    }}}
    ]
    );

當然,有更多經驗的人可以幫助我。

也許是這樣的:

db.collection.update({},
[
{
$addFields: {
  listaItemsIds: {
    $map: {
      input: "$listaItemsIds",
      as: "id",
      in: {
          item: "$$id",
          property1: 55,
          property2: 75
         }
       }
     }
   }
 }
],
{
  multi: true
})

解釋:

使用 $map 替換數組以創建必要的對象。

操場

暫無
暫無

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

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