我在mongodb中有以下文件
{
"_id" : ObjectId("521aff65e4b06121b688f076"),
"uuid" : "160597270101684",
sessionId" : "160597270101684.1",
"stamps" :
{
"currentVisit" : "1377500985",
"lastVisit" : "1377500985"
},
visits : [
{
"page":"google.com",
"method": "GET"
}
]
}
要求:
如果uuid
和sessionId
不存在,我将按上述方式插入文档,否则我只需将对象推送到visits
数组。
任何帮助都会很棒。
答案 0 :(得分:8)
MongoDB支持update
上的upsert
选项,用于更新匹配文档(如果存在),并插入新文档(如果不存在)。在MongoDB 2.4+中,如果upsert执行插入操作,您可以使用$setOnInsert
运算符进一步调整此选项以设置仅的某些字段。
db.test.update({
uuid: "160597270101684",
sessionId: "160597270101684.1"
}, {
$setOnInsert: {
stamps: {
currentVisit: "1377500985",
lastVisit: "1377500985"
}
},
$push:{
visits: {
page: "google.com",
method: "GET"
}
}
}, { upsert:true })
因此,在上面的示例中,$push
到visits
将始终出现,但只有匹配的文档尚不存在时才会出现$setOnInsert
到stamps
。
答案 1 :(得分:2)
您可以通过跟踪upsert查询来实现此目的:
db.session.update({"uuid" : "160597270101684", sessionId : "160597270101684.1"},
{$set:"stamps" :{"currentVisit" : "1377500985","lastVisit" : "1377500985"}},
$push :{visits:{"page":"yahoo.com","method": "POST"}}},
{upsert:true})
如果您想避免重复,可以使用$ addToSet而不是$ push