Reference 如何在MongoDB/pymongo中通过DBRef进行查询?

Reference 如何在MongoDB/pymongo中通过DBRef进行查询?,reference,mongodb,pymongo,dbref,Reference,Mongodb,Pymongo,Dbref,是否可以使用单个find规范通过DBRef进行查询 用户集合 { 'age': 30 } { 'user': DBRef('user', ...) } 后期收集 { 'age': 30 } { 'user': DBRef('user', ...) } 是否可以在一个查找步骤中查询所有30岁用户的帖子?如果不是,那么创建一个javascript函数来处理多阶段操作是明智的还是会导致阻塞问题?不可能做到这一点。我建议: a) 更改数据模型,使所有数据都位于单个

是否可以使用单个find规范通过DBRef进行查询

用户集合

{
    'age': 30
}
{
    'user': DBRef('user', ...)
}
后期收集

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

是否可以在一个查找步骤中查询所有30岁用户的帖子?如果不是,那么创建一个javascript函数来处理多阶段操作是明智的还是会导致阻塞问题?

不可能做到这一点。我建议:

a) 更改数据模型,使所有数据都位于单个文档中(根据具体情况可能不可能)


b) 先查询30岁的用户,然后再进行第二次查询,以获取该列表中用户为$的帖子。我会在客户端执行此操作,而不是使用服务器端JS或诸如此类的操作。

我使用Python驱动程序,所以请原谅我的非mongodb语法:

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

安装pythonbson软件包。试着做个例子

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

在这一点上,单个文档是不可能的,我已经选择了选项B。谢谢。我也遇到了这个问题,我认为map/reduce可能也是一个选项。如何在查询中组合$in?你能举个例子吗?@green我在下面的答案中添加了一个例子