我有一个看起来像的文件:

{
    "personName": "Some name",
    "metaDetails": {
        "visits": 1,
        "otherMeta": 32
    }
}

Mongoose用作Node.js。我想更新(或插入)访问次数。到目前为止,这就是我所拥有的。我已经读过有关$ positional operator的文章,但可能还很遥远:
updObj = {}
newKeyString = "metaDetails.$.visits"
updObj[newKeyString] = 1


Person.update {personName: "Some name}, {$inc: updObj}, {upsert: true}, (err, updRes) ->

但是,这似乎并没有实际更新或插入任何文档。有什么帮助吗?

编辑:添加了模型
mongoose = require 'mongoose'

PersonSchema = new mongoose.Schema
  personName:
    type: String, index: true, unique: true
  metaDetails: []

这是我的模型。故意不只将metaDetails定义为数组,因为其中的数据可能会高度可变

最佳答案

为什么将$运算符放在另一个对象中。在javascript中,它将变成一个关联数组,但是$ inc接受它的等效字符串。

试试这个功能

Person.update {personName: "Some name"}, {$inc:  "metaDetails.$.visits" : 1 }, {upsert: true}, (err, updRes) ->

09-25 17:33