我无法找到有效的查询解决方案。这就是我想做的事。
我有一个名为“发布”的集合 我有一个名为“track”的集合
“releases”具有“releaseDate”字段,该字段为每个“release”文档填充。
我现在想在db.tracks.releases.releaseDate下的每个“track”文档中都有相应的releasedate“releases” (db.tracks.releases已经存在,但没有releaseDate)。
要找到相应的releaseDate,“releases”和“tracks”都有一个ICPN编号:
db.releases.icpn db.tracks.releases.icpn
可以比较那些以找到每个音轨的正确releaseDate。
总结一下: 我需要浏览每个轨道,查看ICPN,使用相同的ICPN搜索发行版,并将releaseDate从发行版复制到轨道。
我只能让它像这样工作:
db.releases.find()。forEach(function(doc){
db.tracks.update(
{ "releases.0.ICPN" : doc.ICPN},
{
$set: { "releases.0.releaseDate": doc.releaseDate},
$currentDate: {"lastModified": true}
},
{ multi: true}
)
})
这适用于我的测试数据库,但是每个版本的每个音轨都非常低效。
你有什么提示让我走上正轨吗?
亲切的问候, 亚历
答案 0 :(得分:0)
目前,该查询仅查找docs中第一个元素为ICPN
的文档您想要在没有绝对索引的情况下进行查询,如:
{ "releases.ICPN" : doc.ICPN}
并使用位置运算符进行更新,以便更新找到的匹配项:
$set: { "releases.$.releaseDate": doc.releaseDate},
答案 1 :(得分:0)
好吧,查询现在部分有效,但是在编辑了1700首曲目(160000)之后就停止了,虽然我将multi设置为true并且所有其他曲目/释放的条件为true(如果ICPN匹配,我会手动检查一些未修改的曲目)。