كيفية الاستعلام من خلال DBREF في mongodb/pymongo؟
سؤال
هل من الممكن الاستعلام عبر DBREF باستخدام مواصفات اكتشاف واحدة؟
جمع المستخدم
{
'age': 30
}
مجموعة ما بعد
{
'user': DBRef('user', ...)
}
هل من الممكن الاستعلام عن جميع المستخدمين من هو 30 في خطوة اكتشاف واحدة؟ إذا لم يكن الأمر كذلك ، فهل سيكون من الحكمة إنشاء وظيفة JavaScript للتعامل مع التشغيل متعدد المراحل أم أن ذلك سيتسبب في حظر المشكلات؟
المحلول
لا يمكن القيام بذلك. أود أن أوصي إما:
أ) تغيير نموذج البيانات الخاص بك بحيث تكون جميع البيانات في مستند واحد (قد لا يكون ذلك ممكنًا اعتمادًا على حالتك).
ب) الاستعلام عن المستخدمين الذين يبلغون من العمر 30 عامًا ، ثم يقومون بإجراء استعلام ثان للحصول على منشورات حيث يكون المستخدم $ في تلك القائمة. سأفعل هذا الجانب العميل بدلاً من استخدام JS من جانب الخادم أو أي شيء من هذا القبيل.
نصائح أخرى
أستخدم سائق Python ، لذا سامح بناء جملة MongoDB:
users = list(db.Users.find({'Age':30}))
posts = list(db.Posts.find({'User':{'$in':users}}))
تثبيت بيثون بسون حزمة. وحاول كمثال.
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)}))