2010-05-19 3 views
4

Можно ли запросить через a DBRef с использованием единственной функции поиска?Как выполнить запрос через DBRef в MongoDB/pymongo?

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

{ 
    'age': 30 
} 

пост

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

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

ответ

6

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

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

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

+0

Единственный документ на данный момент невозможно, и я уже собираюсь с опцией B. Спасибо. – Soviut

+0

У меня тоже была эта проблема, и я думаю, что карта/сокращение может быть и вариантом. http://www.mongodb.org/display/DOCS/MapReduce – sandstrom

+0

как составить запрос $ в запросе? не могли бы вы придумать пример? –

1

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

users = list(db.Users.find({'Age':30})) 
posts = list(db.Posts.find({'User':{'$in':users}})) 
0

Установить 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': '[email protected]'}).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)})) 
Смежные вопросы