如何在MongoDB中为用户存储大量消息?

时间:2016-09-13 14:16:43

标签: javascript node.js mongodb node-mongodb-native

我需要运行我的cron脚本来为每个用户更新/插入(upsert)线程(电子邮件)。我的结构如下:

{ 
    "id" : ObjectId("57d7fc5fd34228c47059"), 
    "id" : "userid", 
    "primaryEmail" : "user@mail.com", 
    "threads_list" : [

    ]
},
{ 
    "_id" : ObjectId("57d7346a73d128c47059"), 
    "id" : "uderid", 
    "primaryEmail" : "user2@mail.com", 
    "threads_list" : [

    ]
}
...

我想将线程存储到threads_list。但是如果它们已经存在,我也想更新它们,或者如果它自上次upsert后没有改变就跳过它,就像我为每个用户创建集合并使用updateOne方法更新存储在其中的电子邮件一样{upsert:true} param。

如果有必要,我不介意将threads_list属性更改为对象类型。

如何正确完成?

1 个答案:

答案 0 :(得分:1)

试试此代码

db.collection('users').update(
          { _id:user.id, 
            $set: {'primaryEmail': newEmail} 
          },
          { $addToSet: { 'threads_list': { $each: resp.labels } } }
        );