我是 mongodb 的新手,因此压力很大,因为 mongodb 的文档不完整,让我不得不反复试验......遗憾的是,我所有的尝试都没有成功,让我对正在发生的事情以及要调试的内容感到困惑......
我只需要更新数据库中匹配某些条件的多条记录,对于不存在的记录,为此创建新条目。我相信我可以通过带有更新、更新插入和多的单个数据库访问来做到这一点。这是我想出的:
dbschema.Person.update( { person_id: { $in: ["734533604" ,"701084015"] } }, { $set: {"scores": 1200} }, { options: { upsert: true, multi: true } } );
我还尝试了多种组合,甚至是旧版本,例如:
dbschema.Person.update( { person_id: { $in: ["734533604" ,"701084015"] } }, { $set: {"scores": 1200} }, { upsert: true }, { multi: true } );
他们都没有工作......
请帮我解决这些琐碎的事情……我可以在 sql 中轻松地做到这一点,但是 nosql 的东西对我来说太有限了……谢谢!
编辑:
find 上的相同查询完美地工作:
dbschema.Person.find( { person_id: { $in: ["734533604" ,"701084015"] } }, function ( err, results ) {
console.log( 'result: ' + results );
console.log( 'error: ' + err );
console.log( 'result length: ' + results.length );
} );
编辑:
我期待创建“未找到”记录,并更新找到的记录。我的逻辑可能有缺陷,我现在很困惑。
最初,我是一次 find()-ing 一条记录,更改值,并为每条修改的记录调用 save(),但是当我部署到 live 时,响应时间变得慢了数百倍,尤其是当有一个每个请求要更新数百条记录。
然后我发现find() + $in,性能恢复了,甚至比以前更好(查询时),但是更新仍然慢得不能接受。因此,现在我正在寻找一种方法来一次查询更新所有文档。 .
我通常在 SQL 中做的是使用 UPDATE WHEN CASE THEN ... 例如:
UPDATE person SET score = CASE
WHEN person_id = "734533604" THEN 1200
WHEN person_id = "701084015" THEN 1200
ELSE
score
END