我们正在重构mongo数据库,我想为一个字段提取值,并将其放入另一个字段中的数组哈希中.以下是数据在文档中的显示方式:
basecampURL: "https://basecamp.com/123/",
trackingSystems: [
{
type: "github",
url: "https://github.com/org/repo/issues/"
}
]
Run Code Online (Sandbox Code Playgroud)
以下是我希望完成的事情:
trackingSystems: [
{
type: "basecamp",
url: "https://basecamp.com/123/"
},
{
type: "github",
url: "https://github.com/org/repo/issues/"
}
]
Run Code Online (Sandbox Code Playgroud)
我已经尝试了这段代码的一些变体,而我遇到的问题是在引用basecampURL的found变量时,MongoDB Update上的所有示例都使用了一个字符串.
db.projects.update(
{ basecampURL: '.+' },
{ $push:
{ trackingSystems:
{
type: 'basecamp',
url: basecampURL // this isn't valid, also tried $.basecampURL
}
},
$unset:
{ basecampURL: '.+' }
},
{ multi: true}
)
Run Code Online (Sandbox Code Playgroud)
好像我没有找到如何引用找到的项目的属性,但我一直想知道是否需要在更新之前存储找到的变量.
您可以使用类似于此的javascript函数来实现此目的:
db.coll.find({basecampURL : {$exists : true}}).forEach(
function(doc) {
var bc = {};
bc.type = "basecamp";
bc.url = doc.basecampURL;
doc.trackingSystems.push(bc);
// deletes the previous value
delete doc.basecampURL;
db.coll.save(doc);
}
)
Run Code Online (Sandbox Code Playgroud)
如果可以避免,请勿使用光标。他们非常慢
现在有 mongo $rename:
db.COLLECTION_NAME.updateMany( {/*filter if you want*/}, { $rename: { "oldFieldName": "newFieldName" } } )
https://docs.mongodb.com/manual/reference/operator/update/rename/
| 归档时间: |
|
| 查看次数: |
2692 次 |
| 最近记录: |