MongoDB перемещает ObjectId из одного поля в другое - PullRequest
1 голос
/ 27 апреля 2019

Проблема

У меня есть ObjectId, сохраненный в поле -incomingFriendRequests-, и я хочу переместить его в другое поле -friends -.

Есть ли лучший способ сделать это, чем удалить его из ReceiveFriendRequests и затем сделать findOneAndUpdate, чтобы добавить его в друзья? Я чувствую, что это можно сделать с помощью одного вызова базы данных вместо двух.

Код

Мангуст Модель:

const userSchema = mongoose.Schema({ 
  friends: [{
    type: mongoose.Schema.Types.ObjectId, ref: 'User', require: false
  }],
  incomingFriendRequests:[{
    type: mongoose.Schema.Types.ObjectId, ref: 'User', require: false
  }],
  online: {type: Boolean, require: true}
});

Ответы [ 2 ]

0 голосов
/ 27 апреля 2019

Невозможно в одном запросе сначала выполнить $ pull в поле входящего запроса для удаления выбранного идентификатора объекта, а затем выполнить другой запрос на обновление друзей для добавления выбранного идентификатора объекта.также вы можете использовать $ addToSet для предотвращения дублирования идентификатора.если вы используете $ push для добавления, в этом случае также сохраняется дубликат objectId.

Запрос: -

1) Удалить: - db.getCollection ('testdata'). Update ({id: ObjectId ('5cc3fa66a04275096417f9ca')}, {"$ pull": {"comingFriendRequests ":" 5cc3fa66a04275096417f9da "}}});

2) add: - db.getCollection ('testdata'). update ({id: ObjectId ('5cc3fa66a04275096417f9ca')}, {" $ addToSet{ "друзья": "5cc3fa66a04275096417f9da"}});// также вы можете использовать $ push

0 голосов
/ 27 апреля 2019

Перемещение значений из одного поля в другое определенно потребует n + 1 вызовов для выполнения преобразования. Это может быть достигнуто с помощью

find({}).forEach(function(doc) {
  // your doc update
  doc.save();
});

Или вы даже можете выполнить набросок.

В случае, если ваша цель состоит в том, чтобы удалить столбецcomingFriendRequests, вы, вероятно, можете переименовать столбец в друзья, вместо этого скопировав все данные.

update({}, { $rename: {incomingFriendRequests: friends }});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...