2011-09-08 58 views
1

从我读你可以做到这一点的文档:我可以将MongoDB值设置为javascript表达式吗?

db.people.update({ name:"Joe" }, { $set: { n : 1 } }); 

http://www.mongodb.org/display/DOCS/Updating

现在我想将它设置为像一个柜台或表达的动态值:

var i = 0; 
db.people.update({ name:"Joe" }, { $set: { n : $i++ } }); 

db.people.update({ name:"Joe" }, { $set: { n : ${new Date()} } }); 

这可能吗 ?

我也接受任何不需要修改和保存完整文档的解决方案。

+0

你知道'$ inc'是做什么的吗?你给的例子没有多大的意义 –

+0

对不起,我纠正了我的错误,谢谢! –

回答

1

蒙戈是MongoDB的支持扩展JavaScript的外壳,所以你可以做任何事情,你可以用普通的JavaScript做:

var i = 0; 
db.people.update({ name:"Joe" }, { $set: { n : i++ } }); 

db.people.update({ name:"Joe" }, { $set: { n : new Date() } }); 

更新

啊所以..这不起作用。您必须单独更新每个文档!在将查询传递给数据库之前执行JS。 Effectly你做以下几点:

db.foo.update({}, { $set: { n : 0 } }, false, true); # i was zero here 
i++; 

正如我所说的,你必须逐一更新文件,但你可以db.eval()执行服务器端整件事加快东西一点点;)

+0

我尝试了你的建议,但似乎我只是评估一次,因此所有文档都得到相同的值(1)。我想这是有道理的。但我仍然在寻找一种方法来分配每次评估的表达式。 –

+0

否每次都评估它。你做错了什么,显示代码。也许你存储的结果(对象),并希望它会再次评估? –

+0

我试了一遍,看到新的答案(我无法得到它作为评论格式正确) –

相关问题