我是新来的mongodb,所以强调出来,因为mongodb的不完整的文档留给我的试验和错误...可悲的是,我所有的尝试都没有工作没有错误,让我困惑什么正在发生什么调试......Mongodb更新与upsert和多语法
我只需要更新数据库上匹配特定条件的多个记录,并且为不存在的记录创建新条目。我相信我可以通过更新,upsert和multi的单一数据库访问来完成。下面是我想出:
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的东西是如此限制我..谢谢!
编辑:
上找到相同的查询工作完美:
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);
});
编辑:
我期待的“未找到”的记录被创建,并且找到的记录是更新。我的逻辑可能有缺陷,现在我非常困惑。我最初一次发现()一条记录,更改值,并为每条修改的记录调用save(),但是当我部署到现场时,响应时间变为数百倍慢特别是当每个请求中有几百条记录需要更新时。
然后我发现find()+ $ in,并且性能得到恢复,甚至比以前更好(当查询时),但更新仍然令人无法接受地慢。因此,现在我正在寻找方法来更新所有文档在一个查询..
我通常做的SQL是使用更新时,CASE THEN ...如:
它不可能 – 2013-05-01 18:02:36
你有几个问题,一些是语法的但是其他的设计。如果您正在查找2条匹配的记录,并且没有找到,您是否期望两者都被创建?如果找到两个中的一个,你是否期望更新一个并创建一个? Upsert最多可以创建一条新记录,这就是为什么multi和upsert有时并不合理。 – 2013-05-01 20:10:38
是的,我期待如果没有找到这两者,如果找到了,它会被更新,而那些没有被发现的东西被创建..你是对的,我很困惑,也许我的逻辑是有缺陷的以及..但我会解释为什么我试图这样做.. – Zennichimaro 2013-05-02 01:46:28