为了把问题弄清楚,让我先举一个例子.
假设我们有一个产品集合,其中一个产品可以有多个品牌,并在不同的store 出售,每个store 可以出售该产品的一个或多个品牌:
{
"name": "Pen",
"shops": [
{
"name": "Target",
"brands": [
"BIC"
]
},
{
"name": "Walmart",
"brands": [
"Parker"
]
}
],
"brands": [
{
"name": "BIC"
},
{
"name": "Parker"
}
]
}
然而,由于不可预见的情况,我们不能再使用品牌名称作为参考,而是应该使用另一个标识符. 然而,我们必须更新所有现有的集合文件,以使其具有如下所示:
{
"name": "Pen",
"shops": [
{
"name": "Target",
"brands": [
"1"
]
},
{
"name": "Walmart",
"brands": [
"2"
]
}
],
"brands": [
{
"id": "1"
"name": "BIC"
},
{
"id": "2"
"name": "Parker"
}
]
}
在品牌上添加ID相对容易,但更换store 内的品牌才是真正的问题.
在mongodb中有没有一种方法来更新shops子文档以使用shops的id而不是名称?
比如:
db.products.updateMany({},
{
$set: {
"shops.brands.$" : "$brands[name=$].id"
}
}
)