MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Comment écrire la condition de correspondance pour les valeurs de tableau ?

Ok vous pouvez le faire de deux manières :

Comme vous avez ceci :

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

Vous devez convertir votre liste de chaînes en liste d'ObjectId en utilisant le code python :

from bson.objectid import ObjectId


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


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

Il ressemblera à ceci :[ObjectId('5d76b2c847c8d3000184a090'),ObjectId('5d7abb7a97a90b0001326010')]

puis en utilisant la nouvelle liste my_list , vous pouvez faire une requête comme celle-ci :

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

Ou dans l'autre sens que je ne préférerais pas, car la conversion de peu de code est plus facile par rapport à n nombre de valeurs pour userid champ sur tous les documents de la base de données, mais juste au cas où vous voudriez que cela soit fait à l'aide de la requête de la base de données :

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

Remarque : Si vous n'avez pas de paquet bson, vous devez l'installer en faisant quelque chose comme pip install bson