如何使用单个查询查询和更新文档?

时间:2014-06-03 07:36:41

标签: node.js mongodb express mongoose

我有以下文件:

{
  "_id": "538584aad48c6cdc3f07a2b3",
  "startTime": "2014-06-12T21:30:00.000Z",
  "endTime": "2014-06-12T22:00:00.000Z",
},
{
  "_id": "538584b1d48c6cdc3f07a2b4",
  "startTime": "2014-06-12T22:30:00.000Z",
  "endTime": "2014-06-12T23:00:00.000Z",
}

正如您所看到的,上面的文档包含startTime和endTime。我需要更新一些不与其他文档重叠的文档。我可以使用两个查询来实现工作:

var event_id = "538584b1d48c6cdc3f07a2b4";
var event = {
    startTime: "2014-06-12T21:30:00.000Z"
    endTime: "2014-06-12T23:30:00.000Z"
};

Model.count({
  _id: {$ne: event_id },
   "$or": [
            {"$and": [
                {"startTime":{"$lte":event.startTime},"endTime":{"$gt":event.startTime}},
                {"startTime":{"$lte":event.endTime},"endTime":{"$lt":event.endTime}}
            ]},
            {"$and":[
                {"startTime":{"$lte":event.startTime},"endTime":{"$gte":event.startTime}},
                {"startTime":{"$lte":event.endTime},"endTime":{"$gte":event.endTime}}
            ]}
        ]

}, function (err, count) {
     if (err) return next(err);

        if (count) {
            return next(new Error('Event overlapping'));
        }

        return Model.findOneAndUpdate({_id: event_id}, event, function (err, event) {
            if (err) return next(err);

            return res.json(200, event);
        });
});

从上面的代码中我可以看到,我首先查询可能重叠的现有事件的检查。然后我会更新。

是否可以使用单个查询进行更新?

0 个答案:

没有答案