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

Hvordan skriver man matchbetingelse for matrixværdier?

Ok, du kan gøre det på to måder :

Som du har dette :

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

Du skal konvertere din liste over strenge til en liste over ObjectId'er ved hjælp af python-kode:

from bson.objectid import ObjectId


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


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

Det vil se sådan ud:[ObjectId('5d76b2c847c8d3000184a090'),ObjectId('5d7abb7a97a90b0001326010')]

derefter ved at bruge ny liste my_list , du kan lave en forespørgsel som denne :

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

Eller på den anden måde, som jeg ikke ville foretrække, da det er nemmere at konvertere få i kode sammenlignet med n antal værdier for userid felt over alle dokumenter i DB, men bare for en sikkerheds skyld, hvis du vil have det gjort ved hjælp af DB-forespørgsel:

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

Bemærk: Hvis du ikke har bson-pakken, skal du installere den ved at gøre noget som pip install bson




  1. Indsæt flere JSON-filer til MongoDB ved hjælp af python

  2. Sådan forudspalter du en GUID-baseret Shard-nøgle med MongoDB

  3. Flere databaser (mongodb[mongoengine] og sql ) med django 1.8

  4. Brug af mongoDB i Express-routere