我试图根据这样的文档中的英雄名称来更改强度:

"_id" : ObjectId("52b0d27b5dee463864000001"),
"author" : "niko",
"permalink" : "super_heroes"
"hero" : [
    {
        "name" : "Batman",
        "strength" : 1,
        "magic" : [ ],
        "times" : [ ]
    },

最初尝试时,我无法更改它:
var operator = { '$set' : { 'hero.strength' : strength } };

var query = { 'permalink': permalink , 'hero.name':name };
posts.update(query, operator, options, function(err, numModified) {...})

我得到了MongoError: can't append to array using string field name: strength

但是在看到this post之后,我加了一个美元符号,它起作用了:
var operator = { '$set' : { 'hero.$.strength' : strength } };

JSON key 中的美元符号是做什么用的?我尝试使用谷歌搜索,但是我只是想出了关于jQuery是一百万种解释。谢谢你。

最佳答案

这不是JSON运算符(不存在JSON运算符。您可能会认为JSON是字符串)。

在这种情况下,$是mongodb positional operator,用于在特定位置执行更新。

10-01 09:24