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

我有以下文件:

{
  "_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);
        });
});

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

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

链接地址: http://www.djcxy.com/p/61949.html

上一篇: How to query and update document by using single query?

下一篇: Mongodb, concat more updates in one query