我需要运行我的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
属性更改为对象类型。
如何正确完成?
答案 0 :(得分:1)
试试此代码
db.collection('users').update(
{ _id:user.id,
$set: {'primaryEmail': newEmail}
},
{ $addToSet: { 'threads_list': { $each: resp.labels } } }
);