需要在 Mongoskin 请求中 "build" 一个 "key" 名称
Need to "build" a "key" name in Mongoskin request
我正在开发 Node.js 应用程序,使用 Mongoskin 和 Express.js。
首先,这是我正在使用的 MongoDB 集合的简单概述:
db.profiles.find()
{ "_id" : ObjectId("5559e6ad8da0dc030010cf64"),
"userid" : "63e9c530-fd60-11e4-a30c-f3b609480e30",
"emailaddr" : { "value" : "x@y.fr", "share" : false },
"fullname" : { "value" : "Azerty Ytreza", "share" : true },
"telnumber" : { "value" : "0606060606", "share" : true }
如您所见,我正在存储多个对象,遵循相同的架构(值 + 布尔值)
根据用户想要分享/不再分享的内容,我需要更新 好的对象 .
的 "share" 值
首先,我不知道如何修改对象中存储的值。
参考这个:Modify nested Object value,我想我可以在我的 Mongoskin 请求中这样做:
db.collection.update( { _id:...} , { $set: { some_key.param2 : new_info } }
在这种情况下,Node.js 报错,说 "SyntaxError: Unexpected token '.' "。
问题是,正如我之前所说,根据用户想要修改的内容,我不会修改相同的内容 "key"。
所以,我需要建立键名。示例:如果用户想要修改他的电子邮件地址的 "share" 值,我将需要更新 emailaddr.share。但是我怎样才能使用 Mongoskin 做到这一点呢?
我尝试了不同的解决方案,但不可能做这样的事情:
var key = "emailaddr",
newVal = "true";
key += ".share";
db.collection.update( { _id: ... } { $set: { key : newval } }
假设您要更改 fullname
属性 的 share 状态:
> var property = "fullname"
> var value = false
您必须动态构建 对象 {"fullname.share": false}
¹ :
> var updt = {}
> updt[property + ".share"] = value
然后使用该对象作为参数 $set
:
> db.test.update({"_id" : ObjectId("5559e6ad8da0dc030010cf64")},
... {$set: updt})
// ^^^^
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
1 作为旁注,如 in the doc 所解释的,引号("
或 '
)是强制性的对象 属性 如果它包含 .
- 因此 语法错误 您在问题中提到。
我正在开发 Node.js 应用程序,使用 Mongoskin 和 Express.js。 首先,这是我正在使用的 MongoDB 集合的简单概述:
db.profiles.find()
{ "_id" : ObjectId("5559e6ad8da0dc030010cf64"),
"userid" : "63e9c530-fd60-11e4-a30c-f3b609480e30",
"emailaddr" : { "value" : "x@y.fr", "share" : false },
"fullname" : { "value" : "Azerty Ytreza", "share" : true },
"telnumber" : { "value" : "0606060606", "share" : true }
如您所见,我正在存储多个对象,遵循相同的架构(值 + 布尔值) 根据用户想要分享/不再分享的内容,我需要更新 好的对象 .
的 "share" 值首先,我不知道如何修改对象中存储的值。 参考这个:Modify nested Object value,我想我可以在我的 Mongoskin 请求中这样做:
db.collection.update( { _id:...} , { $set: { some_key.param2 : new_info } }
在这种情况下,Node.js 报错,说 "SyntaxError: Unexpected token '.' "。
问题是,正如我之前所说,根据用户想要修改的内容,我不会修改相同的内容 "key"。 所以,我需要建立键名。示例:如果用户想要修改他的电子邮件地址的 "share" 值,我将需要更新 emailaddr.share。但是我怎样才能使用 Mongoskin 做到这一点呢? 我尝试了不同的解决方案,但不可能做这样的事情:
var key = "emailaddr",
newVal = "true";
key += ".share";
db.collection.update( { _id: ... } { $set: { key : newval } }
假设您要更改 fullname
属性 的 share 状态:
> var property = "fullname"
> var value = false
您必须动态构建 对象 {"fullname.share": false}
¹ :
> var updt = {}
> updt[property + ".share"] = value
然后使用该对象作为参数 $set
:
> db.test.update({"_id" : ObjectId("5559e6ad8da0dc030010cf64")},
... {$set: updt})
// ^^^^
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
1 作为旁注,如 in the doc 所解释的,引号(
"
或 '
)是强制性的对象 属性 如果它包含 .
- 因此 语法错误 您在问题中提到。