更新数组元素mongodb查询需要花费太多时间

时间:2017-01-27 14:23:04

标签: javascript arrays node.js mongodb

我有这样的集合:

{
    "_id" : ObjectId(),
    "user_id":"10"
    "movie_rate":[
             {
                rate:2,
                movie_id:"120"
             },
             {
                rate:null,
                movie_id:"230"
             },
    ]
}

我想用电影ID更新电影费率数组元素,并为此建立一个查询:

db.rates.update({
     user_id: data.user_id,
    "movie_rate.movie_id": data.movie_id
}, {
     $set: {
       "movie_rate.$.rate": data.rate
     } 
}

所有电影ID都是唯一的,因此我想要更新的电影费率数组中只有一个元素;但是我的更新查询需要花费很多时间来执行,我有7000个文档,每个文档都有电影速率数组,长度为3700 我发现了另一个解决方案,首先它似乎是非常可怕的想法,我在三个查询中解决这个问题我首先找到带有查询查询和用户ID的文件,然后我循环查看电影费率数组并查找该索引元素,我想接下来更新我从带有电影ID的数组中拉出元素,最后我在数组中按下我在查询查询中找到的位置的文档,我的糟糕解决方案明显快于第一个。
这是我的拉查询:

db.rates.update(
{
     user_id: data.user_id
}, 
{
    $pull: {
         movie_rate: {
              movie_id: data.movie_id
                     }
         }
}

这是我的推送查询:

db.rates.update(
{
     user_id: data.user_id
}, 
{
     $push: {
        movie_rate: {
              $each: [{
                 'rate': data.rate,
                 'movie_id': data.movie_id
               }],
               $position: index
         }

     }
}

那么为什么我的第二个解决方案比第一个解决方案更快?

0 个答案:

没有答案