Được, bạn có thể làm theo hai cách:
Như bạn đã thấy:
uid = Objectid("5d518caed55bc00001d235c1")
disuid = ['5d76b2c847c8d3000184a090', '5d7abb7a97a90b0001326010']
Bạn cần chuyển đổi danh sách các chuỗi của mình thành danh sách ObjectId bằng cách sử dụng mã python:
from bson.objectid import ObjectId
disuid = ['5d76b2c847c8d3000184a090', '5d7abb7a97a90b0001326010']
my_list = []
for i in disuid:
my_list.append(ObjectId(i))
Nó sẽ giống như sau:[ObjectId('5d76b2c847c8d3000184a090'),ObjectId('5d7abb7a97a90b0001326010')]
sau đó bằng cách sử dụng danh sách mới my_list
, bạn có thể thực hiện truy vấn như sau:
user_posts.aggregate([{"$match" : { "$or" : [{ "userid" : uid }, { "userid" : { "$in" : my_list }}]}}])
Hoặc theo cách khác mà tôi không thích, vì chỉ chuyển đổi một vài mã trong mã sẽ dễ dàng hơn so với n num giá trị cho userid
trên tất cả các tài liệu trong DB, nhưng chỉ trong trường hợp bạn muốn nó được thực hiện bằng cách sử dụng truy vấn DB:
user_posts.aggregate([{$addFields : {userStrings : {$toString: '$userid'}}},{"$match" : { "$or" : [{ "userid" : uid }, { "userStrings" : { "$in" : disuid }}]}}])
Lưu ý: Trong trường hợp nếu bạn không có gói bson, thì bạn cần cài đặt nó bằng cách thực hiện hành động như pip install bson