如何通过MongoDB驱动程序(node.js)将属性(属性名称是可变的)添加到对象中

How to add a property (property name is variable) to object via MongoDB driver (node.js)

本文关键字:属性 添加 对象 js node MongoDB 何通过 驱动程序      更新时间:2024-02-21

我的文档在集合中的结构是这样的。

{ 
"_id" : ObjectId("54e74de2950fd3a4e5f0a37a"),
"userName": "Any_user",
"ratings": {
   "rating1" : [ ],
   "big_rating" : [ ] 
  }
}

在MongoDB客户端(mongo.exe)中,我需要添加的内容看起来像这个

db.userContent.update({userName: "NXTaar"}, {$set: {"ratings.variable_name": []}})

我需要MongoDB node.js驱动程序的功能是的,我知道"属性名称为字符串"这一点,我可以将变量传递给属性名称。以下是我尝试制作的:

var rating = {};
var title = 'some_string';
ratings[title] = [];
usercontent.update({userName: "some_user"}, {$set: ratings}, function (err, doc) {...})

此行向文档中添加一个新对象,该对象的名称为属性

usercontent.update({userName: "some_user"}, {$set: {ratings: ratings}}, function (err, doc) {...})

这个正是我所需要的,但每次运行时,它都会用一个新的属性重写当前属性(是的,我知道,这是因为$set参数会用你传递给它的东西更改所选对象)

我需要一个函数,它可以向通过变量

命名的对象添加一个属性

如此:

var t = "property_name"
var field_name = "ratings." + t
var update = { "$set" : { } }
update["$set"][field_qname] = []
db.usercontent.update({ "userName" : "some_user" }, update)

构造正确的点表示法字段名称,然后构造正确的$set更新表达式,然后将其传递给update函数。