mongodb深度更新 - mongoose .id()导致性能问题

时间:2016-01-11 04:56:38

标签: node.js mongodb mongoose

猫鼬级别集合架构

{
    sublevel: [{
        "deeplevel": [{

        }],
        "deeplevel2": [{

        }],
    }]
}

// routes.js

dlDoc = { "dl1": "dl1" };
db.levels.update({ _id: ObjectId(levelId), "sublevel._id": ObjectId(sublevelId) }, { $push: { "sublevel.$.deeplevel1": dlDoc } }, function (err, updatedDoc) {
    if (updatedDoc) {
        res.json({ "status": 1 });
        res.end();
        //calling external apis to update more
        result = externalApiResult();
        db.levels.findById(level._id, 'sublevel._id sublevel.deeplevel1', function (err, levelFound) {
            levelFound.sublevel.id(sublevelId).deeplevel.id(dlDoc._id)['result'] = result;
            levelFound.save(function (err, savedDoc) {

            });
        })

    }
});

我需要创建和更新关卡集的deeplevel1。在我的情况下,deeplevel1每天将插入超过2000个子文档。当我想使用mongoose .id(deepLevelId)函数进行更新时,它会导致我在服务器中出现性能问题。有没有办法找到更新水平集合后插入的deeplevel文件的位置?这样我就可以使用更新查询中的位置。请告诉我更新我的深度子文档的最佳方法,而不会导致性能问题,并且工作得很快。提前谢谢。

db.collection.findOne()将是这样的。

{
"_id" : ObjectId("563b35d1f07cc9d80a26436b"),
"name":"name",
sublevel:[{
  "_id" : ObjectId("569bede3c717b670097519c7"),
  "name" : "name",
  "deeplevel2" : [{
      "_id" : ObjectId("569c559329cc880c18989349"),
      "logTime" : new Date("1/18/2016 03:30:48"),
      "areaId" : ObjectId("568a6129de552e7dba98d547"),
    }, {
      "_id" : ObjectId("569c561929cc880c18989354"),
      "logTime" : new Date("1/18/2016 03:30:48"),
      "areaId" : ObjectId("568a6129de552e7dba98d547"),
    }, {
      "_id" : ObjectId("569c5945626ffb680e4512e9"),
      "logTime" : new Date("1/18/2016 03:30:48"),
      "areaId" : ObjectId("568a6129de552e7dba98d547"),
    }, {
      "_id" : ObjectId("569c594d626ffb680e4512eb"),
      "logTime" : new Date("1/18/2016 03:30:48"),
      "areaId" : ObjectId("568a6129de552e7dba98d547"),
    }
  ]
}]
}

0 个答案:

没有答案
相关问题