[英]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.