Как выполнить запрос через DBRef в MongoDB/pymongo?
Вопрос
Можно ли сделать запрос через DBRef с использованием одной спецификации поиска?
коллекция пользователей
{
'age': 30
}
коллекция постов
{
'user': DBRef('user', ...)
}
Можно ли за один шаг поиска запросить все сообщения, число пользователей которых составляет 30 лет?Если нет, то было бы разумно создать функцию javascript для обработки многоэтапной операции или это вызовет проблемы с блокировкой?
Решение
это невозможно сделать.я бы порекомендовал либо:
а) изменение модели данных так, чтобы все данные находились в одном документе (в зависимости от вашего случая это может быть невозможно).
б) сначала запрос пользователей, которым исполнилось 30 лет, а затем выполнение второго запроса, чтобы получить сообщения, в которых пользователь находится в этом списке.я бы сделал это на стороне клиента, а не использовал JS на стороне сервера или что-то в этом роде.
Другие советы
Я использую драйвер Python, так что простите мой не совсем mongodb-синтаксис:
users = list(db.Users.find({'Age':30}))
posts = list(db.Posts.find({'User':{'$in':users}}))
Установить питон Бсон упаковка.и попробуйте на примере.
import pymongo
from pymongo import MongoClient
from bson.dbref import DBRef
client = MongoClient('ip', 27017)
client.the_database.authenticate('user', 'password', source='db_name')
db = client['db_name']
user = db['user']
user_id = user.find_one({'email': 'xxxxx@gmail.com'}).get('_id')
client_user_relation = db['client_user_relation']
print(client_user_relation.find_one())
print(user_id)
print(DBRef(collection = "user", id = user_id))
print(client_user_relation.find_one({'user': DBRef(collection = "user", id = user_id)}))