更新

时间:2016-05-17 12:01:59

标签: mongodb mongodb-query casbah

是否可以在更新时获取当前文档字段值,类似于$ where运算符?

我正在尝试插入(或更新)一个字段,其键名是更新文档中另一个键的值。

我正在使用Scala的casbah:

DB.update(
    MongoDBObject("$where" ->  jSFunctionAsString()),
    $addToSet(**this._id** -> "someVal"), multi = true)
)

def jSFunctionAsString() = """ 
function f(){
    return this._id > 3
}
"""

所以我要做的是使用_id字段作为插入/更新字段的键,当使用$ where时可以使用,但我也想在$ addToSet中使用它。

我读过我可以使用$ findandmodify,但与$ update相比,查询需要的时间太长

编辑 - 示例:

收藏:

{ "_id" : 1, "item" : "abc", "price" : 10, "quantity" : 2 }
{ "_id" : 2, "item" : "jkl", "price" : 20, "quantity" : 1 }
{ "_id" : 3, "item" : "xyz", "price" : 5, "quantity" : 5 }
{ "_id" : 4, "item" : "abc", "price" : 10, "quantity" : 10 }
{ "_id" : 5, "item" : "xyz", "price" : 5, "quantity" : 10 }

for object in collection : 
    DB.update(
        MongoDBObject("$where" ->  jSFunctionAsString()),
        $addToSet(**this._id** -> object._id), multi = true)
    )

预期结果:

{ "_id" : 1, "item" : "abc", "price" : 10, "quantity" : 2 }
{ "_id" : 2, "item" : "jkl", "price" : 20, "quantity" : 1 }
{ "_id" : 3, "item" : "xyz", "price" : 5, "quantity" : 5 }
{ "_id" : 4, "item" : "abc", "price" : 10, "quantity" : 10, 4:[1,2,3,4,5]}
{ "_id" : 5, "item" : "xyz", "price" : 5, "quantity" : 10, 5:[1,2,3,4,5]}

但是我无法在没有找到它的情况下获得更新的文档ID(因此我必须将文档带到机器而不是直接在数据库中更新)

0 个答案:

没有答案