更新:我建议阅读我接受的答案,它为您提供了解决此问题的不同方法。
我有以下收藏。
{
"_id" : ObjectId("51fa56408e843042c0c24e3d"),
"uniqDates" : [
ISODate("2013-07-30T18:30:00Z"),
ISODate("2013-07-31T18:30:00Z")
]
}
{
"_id" : ObjectId("51fa5648c424ea3e37199502"),
"events" : [
{
"eid" : 1,
"title" : "Event 1",
"start" : ISODate("2013-08-04T18:30:00Z")
},
{
"eid" : 2,
"title" : "Event 2",
"start" : ISODate("2013-08-08T18:30:00Z")
}
]
}
如果存在,我想更新“事件”数组中的文档(我想通过 eid 检查它),如果它不存在,我想插入该文档。
目前我正在使用两个查询来执行此操作。
db.col.update({events: {$exists: 1}}, {$pull: {"events": {"eid": 2}}});
和
db.schedule.update({events: {$exists: 1}}, {$addToSet:
{"events": {"eid": 2, "title": "Event 4", "start": new Date(2013, 08, 02)}}});
有没有办法用单个查询来做到这一点?带有 upsert 操作的东西。