MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Como escrever condição de correspondência para valores de matriz?


Ok, você pode fazer de duas maneiras:

Como você tem isso:
uid = Objectid("5d518caed55bc00001d235c1")
disuid = ['5d76b2c847c8d3000184a090', '5d7abb7a97a90b0001326010']

Você precisa converter sua lista de strings para lista de ObjectIds usando o código python:
from bson.objectid import ObjectId


disuid = ['5d76b2c847c8d3000184a090', '5d7abb7a97a90b0001326010']
my_list = []


for i in disuid:
    my_list.append(ObjectId(i))

Ficará assim:[ObjectId('5d76b2c847c8d3000184a090'),ObjectId('5d7abb7a97a90b0001326010')]

em seguida, usando a nova lista my_list , você pode fazer uma consulta assim:
user_posts.aggregate([{"$match" : { "$or" : [{ "userid" : uid }, { "userid" : { "$in" : my_list }}]}}])

Ou da outra maneira que eu não preferiria, pois converter apenas alguns no código é mais fácil em comparação com n números de valores para userid campo sobre todos os documentos no banco de dados, mas apenas no caso, se você quiser que isso seja feito usando a consulta do banco de dados:
user_posts.aggregate([{$addFields : {userStrings : {$toString: '$userid'}}},{"$match" : { "$or" : [{ "userid" : uid }, { "userStrings" : { "$in" : disuid }}]}}])

Observação: Caso você não tenha o pacote bson, então você precisa instalá-lo fazendo algo como pip install bson