У меня есть две коллекции, группа и пользователь. Первоначально в моем документе Group содержался массив ссылок пользователей. Но я изменил свое сопоставление, чтобы теперь пользователи имели ссылку на группу. Мне интересно, как я могу написать запрос, чтобы обновить все существующие документы пользователя, чтобы ссылаться на группу, которая в настоящее время ссылается на них, а затем удалять ссылки на группы.MongoDB: обновление коллекции объектов для изменения владельца ссылки
ответ
я не заметил, язык, который вы используете в первый - я должен был сделать что-то очень похожее на Python, так вот мой пример кода:
# I changed my collection names to users/groups hope I mapped them right :)
users = db.users
groups = db.groups
for u in users.find():
grp = groups.find({ "users" : u['userId'] })
u['groups'] = [ g['groupId'] for g in grp ]
users.save(u)
В принципе, для каждого пользователя, я смотрю в группах найти список групп, которые содержат userId в пользователе массива, и я создаю список, называемый группами в u, и когда я его сохраняю, добавляется массив групп для документов пользователей.
Должно быть не трудно сделать это в PHP
$ пользователей = $ db-> пользователей; $ groups = $ db-> groups;
// найти всех пользователей $ ucursor = $ users-> find();
// перебирает пользователь, найти группы, которые имеют пользователь, // пользователя обновления с множеством групп Еогеаспа ($ ucursor, как $ и) { $ gcursor = $ groups-> найти (...) ; Еогеасп ($ gcursor в $ г) { ... }}
Но это похоже на работу один раз, вы можете сделать это в Монго оболочки, используя что-то похожее на:
var users = db.users.find();
while (users.hasNext()) {
u = users.next();
var gs = db.groups.find({"users":u.userId},{"groupId:1}).toArray();
db.users.update({"groupId":groupId},{$set:{"groups":gs}});
}
Вопрос помечен [php] ... – BoltClock
Это добавляет массив, ссылающийся на группы. Я предполагаю, что избавиться от массива пользователей от групп более просто. Просто выполните для каждой группы: db.groups.update ({"groupId": 10}, {$ unset: {"users": 1}}), чтобы удалить массив пользователей из группы с groupId 10. –
oops, not notice тег php –
- 1. Обновление записи коллекции mongodb
- 2. Обновление объекта коллекции Mongodb. Node.js MongoDB
- 3. MongoDB Обновление коллекции в
- 4. Обновление коллекции зависимых объектов
- 5. Обновление встроенного элемента коллекции MongoDB
- 6. Обновление внутренней коллекции в MongoDB
- 7. MongoDB, массив обновление ошибочными коллекции
- 8. Обновление коллекции (getResultList) объектов entityManager.refresh
- 9. версий не выполняется для onetomany владельца коллекции
- 10. MongoDB C Обновление # конкатенация объектов
- 11. Сценарий для изменения владельца сайта в SharePoint?
- 12. Обновление MongoDB на основе объектов массива .map()
- 13. MongoDB - Обновление объектов Сдать документ
- 14. MongoDB: Обновление вложен массив объектов
- 15. Использовать статические ссылки на MongoDB коллекции
- 16. Grails MongoDB Plugin: Встроенные Коллекции против Ссылки
- 17. Обновление вложенной коллекции mongodb с помощью курсора
- 18. MongoDB C# Ссылки на другие коллекции
- 19. Обновление поля массива в коллекции MongoDB
- 20. Обновление коллекции MongoDB с помощью скрипта python
- 21. MongoDB ссылки триггер обновления
- 22. Обновление коллекции mongoDb на вложенных массивах
- 23. Вставка объектов, содержащих коллекции в MongoDB
- 24. Изменение владельца изменения gerrit
- 25. Обновление коллекции на основе данных в другой коллекции в MongoDB
- 26. Обновление каждого элемента в коллекции MongoDB
- 27. Обновление коллекции MongoDB с использованием $ toLower
- 28. MongoDb выбрать различные типы объектов в коллекции
- 29. MongoDB - Обновление объектов в стороне вложенного массива в коллекции (вложенное обновление)
- 30. MongoDB динамического обновления коллекции, когда изменения происходит в другой коллекции
Как о разумном вопросе с реальными данными? Должны ли мы угадать ваши данные? –
Существует массив DBRefs с одной стороны .. и мне нужно поменять их на поле в ссылочном документе вместо этого. Что еще нужно знать? – MDrollette