2016-09-13 2 views
0

Мне нужно запустить мои скрипты cron для обновления/вставки (upsert) потоков (писем) для каждого пользователя. У меня есть коллекция, которая структурирована, такие как:Как хранить большое количество сообщений для пользователей в MongoDB?

{ 
    "id" : ObjectId("57d7fc5fd34228c47059"), 
    "id" : "userid", 
    "primaryEmail" : "[email protected]", 
    "threads_list" : [ 

    ] 
}, 
{ 
    "_id" : ObjectId("57d7346a73d128c47059"), 
    "id" : "uderid", 
    "primaryEmail" : "[email protected]", 
    "threads_list" : [ 

    ] 
} 
... 

Я хочу, чтобы хранить нити в threads_list. Но я также хочу обновить их, если они уже существуют, или просто пропустить его, если он не изменился после последнего upsert, так же, как я создавал бы коллекцию для каждого пользователя и обновлял электронные письма, хранящиеся внутри, с помощью метода updateOne, который имеет параметр {upsert:true}.

Я не возражаю при изменении атрибута типа threads_list в тип объекта.

Как это делается правильно?

ответ

1

Попробуйте этот код

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

Да это было опечатка. И да, я хочу нажимать объекты потоков, которые я извлек из API в массив 'threads_list'. Если почта уже существует, обновите ее, а не вставляйте дубликаты. – Kunok

Смежные вопросы