Ok, możesz to zrobić na dwa sposoby:
Jak masz to :
uid = Objectid("5d518caed55bc00001d235c1")
disuid = ['5d76b2c847c8d3000184a090', '5d7abb7a97a90b0001326010']
Musisz przekonwertować swoją listę ciągów na listę ObjectId za pomocą kodu Pythona:
from bson.objectid import ObjectId
disuid = ['5d76b2c847c8d3000184a090', '5d7abb7a97a90b0001326010']
my_list = []
for i in disuid:
my_list.append(ObjectId(i))
Będzie wyglądać tak :[ObjectId('5d76b2c847c8d3000184a090'),ObjectId('5d7abb7a97a90b0001326010')]
następnie używając nowej listy my_list
, możesz wykonać zapytanie w ten sposób:
user_posts.aggregate([{"$match" : { "$or" : [{ "userid" : uid }, { "userid" : { "$in" : my_list }}]}}])
Lub w inny sposób, którego nie wolałbym, ponieważ konwersja tylko kilku w kodzie jest łatwiejsza w porównaniu z liczbą n wartości dla userid
pole nad wszystkimi dokumentami w DB, ale na wszelki wypadek, jeśli chcesz to zrobić za pomocą zapytania DB:
user_posts.aggregate([{$addFields : {userStrings : {$toString: '$userid'}}},{"$match" : { "$or" : [{ "userid" : uid }, { "userStrings" : { "$in" : disuid }}]}}])
Uwaga: W przypadku, gdy nie masz pakietu bson, musisz go zainstalować, wykonując coś takiego jak pip install bson