sql >> Databasteknik >  >> NoSQL >> MongoDB

Hur skriver man matchningsvillkor för matrisvärden?

Ok, du kan göra det på två sätt:

Som du har det här :

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

Du måste konvertera din lista med strängar till en lista med ObjectId med python-kod:

from bson.objectid import ObjectId


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


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

Det kommer att se ut så här:[ObjectId('5d76b2c847c8d3000184a090'),ObjectId('5d7abb7a97a90b0001326010')]

sedan genom att använda ny lista my_list , du kan göra en fråga så här :

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

Eller på andra sätt som jag inte skulle föredra, eftersom det är lättare att konvertera några få i kod jämfört med n antal värden för userid fält över alla dokument i DB, men för säkerhets skull om du vill att det ska göras med DB-fråga:

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

Obs: Om du inte har bson-paketet måste du installera det genom att göra något som pip install bson




  1. Hur uppdaterar man MongoDb-databasen i Java?

  2. Ska jag använda alternativet allowDiskUse i en produktmiljö?

  3. Kör redis på nodejs Docker-bild

  4. Omforma alla dokument i samlingen