我正在使用节点mongodb模块MongoClient方法。
我的mongodb集合包含如下结构的记录:
{
"_id" : ObjectId("546d64103e53563b506433df"),
"type" : "staticCollection",
"features" : [
{
"type" : "static",
"properties" : {
"source" : "sometext",
"timestamp" : "1416455167",
"id" : "47759600",
"msgType" : 54,
"name" : null,
"data" : "some data string"
}
}
]
}
当我收到“id”项已经存在的数据时,我想更新“properties”中包含的所有项目。
如果不存在“id”匹配,我想插入整个记录。
我想使用up with up来执行此操作。
我很难理解db.collection.update命令的语法是什么。 有人可以帮忙吗?
答案 0 :(得分:1)
您正在寻找$setOnInsert。如果找不到要素项,假设您要设置整个文档,它将如下所示:
var propertiesId = req.query.propertiesId; // or however you're getting it
var allProperties = {} ; //set the full properties from the request etc
db.collection.update(
{ features : { $elemMatch: { 'properties.id' : propertiesId } } },
{ $set : { 'features.$.properties': allProperties },
$setOnInsert: {
type: "staticCollection",
features: [ { type: "static", properties: allProperties } ]
}
},
{ upsert: true }
)
答案 1 :(得分:1)
假设集合名称为:features
。你可以试试这个:
db.features.update({"_id" : ObjectId("546d64103e53563b506433df")},
{
"type" : "staticCollection",
"features" : [
{
"type" : "static",
"properties" : {
"source" : "sometext",
"timestamp" : "1416455167",
"id" : "47759600",
"msgType" : 54,
"name" : null,
"data" : "some data string 2"
}
}
]
}, true)
这一切应该在一行上,我把它们放在很多行上,以便于阅读。
查询末尾的true
表示这是upsert
。