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
是超级变量,可以。。。任何东西