更新时“不允许使用修饰符进行字段名称复制”

时间:2011-01-03 13:06:46

标签: mongodb

我在尝试更新Mongo中的字段时遇到“字段名称重复不允许使用修饰符”错误。一个例子:

> db.test.insert({test: "test1", array: [0]});
> var testFetch = db.test.findOne({test: "test1"});
> db.test.update(testFetch, 
                 {$push: {array: 1}, //push element to end of key "array"
                  $pop:  {array: -1} //pop element from the start of key "array"
                 });
  Field name duplication not allowed with modifiers

有没有办法执行这个原子操作?我不想为此做两个单独的更新。

1 个答案:

答案 0 :(得分:13)

Mongo的票务系统有一个突出的问题:http://jira.mongodb.org/browse/SERVER-1050

看起来好像是今年的。你的场景绝对是一个明智的场景,但它也与一堆边缘案例有关。如果您在空数组上$push$pop怎么办?期待什么?如果您$push$pull,您想要什么?

  

我不想为此做两次单独的更新。

我知道这样做真的有“代码味道”,但它是否是使用此解决方案的完全阻止程序? “双重更新”是否会彻底摧毁服务器性能?