Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/38.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mongodb 是否可以使用$inc通过Mongoose更新子文档?_Mongodb_Node.js_Mongoose_Upsert - Fatal编程技术网

Mongodb 是否可以使用$inc通过Mongoose更新子文档?

Mongodb 是否可以使用$inc通过Mongoose更新子文档?,mongodb,node.js,mongoose,upsert,Mongodb,Node.js,Mongoose,Upsert,我有一个文档,看起来像: { "personName": "Some name", "metaDetails": { "visits": 1, "otherMeta": 32 } } 为Node.js使用Mongoose。我想更新(或插入)访问次数。这是我到目前为止所拥有的。我已经读到了关于这个问题的文章,但我可能有点离题了: updObj = {} newKeyString = "metaDetails.$.visits" updObj

我有一个文档,看起来像:

{
    "personName": "Some name",
    "metaDetails": {
        "visits": 1,
        "otherMeta": 32
    }
}
Node.js
使用
Mongoose
。我想更新(或插入)访问次数。这是我到目前为止所拥有的。我已经读到了关于这个问题的文章,但我可能有点离题了:

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) ->

我不熟悉Mongoose语法,因为我通常直接使用本机驱动程序,但您的JS更新应该如下所示:

db.Person.update({“personName”:“Some name”,“metaDetails.visions”:{$exists:true},{“$inc”:{“metaDetails.$.visions”:1})

这可能是类似的,我不确定(感觉缺少括号):

Person.update{personName:“Some name”,$exists:“metaDetails.visions”:true},{$inc:“metaDetails.$.visions”:1}


如果没有带有访问键的metaDetails对象,则将upsert设置为true将创建重复的personName记录。简而言之,更新中的$operator要求字段是谓词的一部分。

我觉得这是正确的。我会检查一下,看看有什么问题。这不起作用,因为我没有指定
访问。查看我的编辑above@Shamoon,我们只能根据你在问题中提到的内容来回答。。我怎么知道你在别的地方犯了错。。只是想知道在添加访问之后,您的初始查询是否正常?我错了。我无法添加
访问
。这就是问题所在,因为我的
metaDetails
是超级变量,可以。。。任何东西