MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Come scrivere la condizione di corrispondenza per i valori dell'array?

Ok puoi farlo in due modi:

Come hai questo :

uid = Objectid("5d518caed55bc00001d235c1")
disuid = ['5d76b2c847c8d3000184a090', '5d7abb7a97a90b0001326010']

Devi convertire il tuo elenco di stringhe in un elenco di ObjectId usando il codice Python:

from bson.objectid import ObjectId


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


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

Si presenterà così:[ObjectId('5d76b2c847c8d3000184a090'),ObjectId('5d7abb7a97a90b0001326010')]

quindi utilizzando il nuovo elenco my_list , puoi eseguire query in questo modo:

user_posts.aggregate([{"$match" : { "$or" : [{ "userid" : uid }, { "userid" : { "$in" : my_list }}]}}])

O nell'altro modo che non preferirei, poiché convertire solo pochi codici è più semplice rispetto a n num di valori per userid campo su tutti i documenti in DB, ma per ogni evenienza se si desidera che venga eseguito utilizzando la query DB:

user_posts.aggregate([{$addFields : {userStrings : {$toString: '$userid'}}},{"$match" : { "$or" : [{ "userid" : uid }, { "userStrings" : { "$in" : disuid }}]}}])

Nota : Nel caso in cui non si disponga del pacchetto bson, è necessario installarlo facendo qualcosa come pip install bson