2010-05-19 66 views
4

是否可以使用單個查找規範查詢 DBRef?如何通過MongoDB/pymongo中的DBRef查詢?

用戶採集

{ 
    'age': 30 
} 

收集後

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

是否可以查詢所有職位誰的用戶是30單找到一步?如果沒有,創建一個javascript函數來處理多階段操作或會導致阻塞問題是明智的嗎?

回答

6

這是不可能的。我會建議:

a)改變你的數據模型,使所有的數據都在一個單一的文件(可能無法取決於你的情況)。

b)查詢30個第一個用戶,然後進行第二個查詢以獲取該列表中用戶爲$的帖子。我會做這個客戶端而不是使用服務器端JS或類似的東西。

+0

在這一點上,單個文檔是不可能的,我已經選擇了B.謝謝。 – Soviut 2010-05-19 18:51:27

+0

我也有這個問題,我認爲map/reduce也可能是一個選項。 http://www.mongodb.org/display/DOCS/MapReduce – sandstrom 2010-09-16 19:42:26

+0

如何編寫$ in查詢?你能想出一個例子嗎? – 2011-06-01 01:20:22

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