MongoDB заполняет элементы до условия $ pull - PullRequest
0 голосов
/ 02 июля 2018

Коллекция пользователей:

[
  {
    _id: '5b3935c2d4850aa2d9f0ae25',
    feedBucket: ['5b37d16665c4127e7a088812', '5b3a19c5be4949b0d74476d4']
  },
{
    _id: '35c2d4850aa2d9f0ae25ab39',
    feedBucket: ['5b37d16665c4127e7a088812', '5b3a19c5be4949b0d74476d4']
  }
]

Почтовая коллекция:

[
  {
    _id: '5b37d16665c4127e7a088812',
    createdAt: 2018-07-01 23:12:50.232
  },
  {
    _id: '5b3a19c5be4949b0d74476d4',
    createdAt: 2018-05-01 23:12:50.232
  },
]

Я хочу выполнить следующее:

const date = new Date()
date.setMonth(date.getMonth() - 1)

await User.updateMany(
  {},
  { $pull: { feedBucket: { createdAt: { $lte: date } } } }
)

Есть ли способ заполнить элементы feedBucket до условия $ pull? Или feedBucket не должен быть массивом идентификаторов элементов, но должен быть массивом документов элементов?

1 Ответ

0 голосов
/ 02 июля 2018

Вы можете попробовать код ниже:

const postsToPull = await Post.find({ createdAt: { $lte: date } });
await User.updateMany(
  {},
  { $pull: { feedBucket: { $in: postsToPull } }
)

Другой вариант - хранить createdAt в feedBicket как

{
    _id: ObjectId,
    createdAt: Date
}

Затем вы можете запросить его с помощью

await User.updateMany(
  {},
  { $pull: { feedBucket: { createdAt: { $lte: date } } } }
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...