Как сделать запрос через DBRef в MongoDB / pymongo? - PullRequest
4 голосов
/ 19 мая 2010

Можно ли запросить от до DBRef, используя одну спецификацию поиска?

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

{
    'age': 30
}

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

{
    'user': DBRef('user', ...)
}

Можно ли запросить все сообщения, которым 30 пользователей за один шаг поиска? Если нет, то было бы разумно создать функцию javascript для обработки многоступенчатой ​​операции или это вызовет проблемы с блокировкой?

Ответы [ 3 ]

6 голосов
/ 19 мая 2010

это невозможно сделать. я бы порекомендовал либо:

a) изменение модели данных таким образом, чтобы все данные были в одном документе (это может быть невозможно в зависимости от вашего случая).

b) запрашивать пользователей, которым в первую очередь 30 лет, а затем делать второй запрос, чтобы получить сообщения, где пользователь находится в этом списке в $. Я хотел бы сделать это на стороне клиента, а не на стороне сервера JS или что-то в этом роде.

1 голос
/ 11 октября 2012

Я использую драйвер Python, так что прости мой синтаксис не так-mongodb:

users = list(db.Users.find({'Age':30}))
posts = list(db.Posts.find({'User':{'$in':users}}))
0 голосов
/ 16 апреля 2014

Установить пакет python bson . и попробуйте в качестве примера.

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)}))
...