2010-05-19 6 views
4

Est-il possible d'interroger à un DBRef utilisant une spécification de recherche unique?Comment faire une requête via DBRef dans MongoDB/pymongo?

collection utilisateur

{ 
    'age': 30 
} 

post collection

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

Est-il possible d'interroger pour tous ses utilisateurs poste qui sont 30 en une seule étape de découverte? Si ce n'est pas le cas, serait-il judicieux de créer une fonction javascript pour gérer l'opération en plusieurs étapes ou cela causera-t-il des problèmes de blocage?

Répondre

6

ce n'est pas possible. Je recommanderais:

a) de changer votre modèle de données pour que toutes les données soient dans un seul document (cela pourrait ne pas être possible selon votre cas). B) interroger d'abord les utilisateurs qui sont 30, puis faire une deuxième requête pour obtenir les messages dont l'utilisateur est $ dans cette liste. Je ferais ce côté client plutôt que d'utiliser JS côté serveur ou quelque chose comme ça.

+0

Un document unique n'est pas possible à ce stade et je vais déjà avec l'option B. Merci. – Soviut

+0

J'ai juste eu ce problème aussi, et je pense que map/reduce peut aussi être une option. http://www.mongodb.org/display/DOCS/MapReduce – sandstrom

+0

comment composer la requête $ dans? pourriez-vous s'il vous plaît venir avec un exemple? –

1

J'utilise un pilote Python, Pardonne donc ma syntaxe pas si MongoDB:

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

paquet python Installer BSON. et essayez par exemple.

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