MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Wie schreibe ich eine Übereinstimmungsbedingung für Array-Werte?

Ok, Sie können es auf zwei Arten tun:

Wie Sie dies haben:

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

Sie müssen Ihre Liste von Zeichenfolgen mithilfe von Python-Code in eine Liste von ObjectIds konvertieren:

from bson.objectid import ObjectId


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


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

Es sieht so aus:[ObjectId('5d76b2c847c8d3000184a090'),ObjectId('5d7abb7a97a90b0001326010')]

dann mit der neuen Liste my_list , können Sie eine Abfrage wie folgt durchführen:

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

Oder auf die andere Weise, die ich nicht bevorzugen würde, da das Konvertieren von nur wenigen Codes einfacher ist als n Anzahl von Werten für userid Feld über alle Dokumente in der DB, aber nur für den Fall, wenn Sie möchten, dass dies mit der DB-Abfrage erfolgt:

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

Hinweis: Falls Sie kein bson-Paket haben, müssen Sie es installieren, indem Sie so etwas wie pip install bson ausführen