sql >> Database >  >> NoSQL >> MongoDB

Hoe een overeenkomstvoorwaarde voor matrixwaarden te schrijven?

Oké, je kunt het op twee manieren doen:

Omdat je dit hebt:

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

U moet uw lijst met strings converteren naar een lijst met ObjectId's met behulp van python-code:

from bson.objectid import ObjectId


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


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

Het ziet er als volgt uit:[ObjectId('5d76b2c847c8d3000184a090'),ObjectId('5d7abb7a97a90b0001326010')]

vervolgens door de nieuwe lijst my_list . te gebruiken , je kunt een zoekopdracht als volgt doen:

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

Of op de andere manier die ik niet zou willen, omdat het omzetten van slechts enkele in code eenvoudiger is in vergelijking met n aantal waarden voor userid veld over alle documenten in DB, maar voor het geval je wilt dat het wordt gedaan met behulp van DB-query:

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

Opmerking: Als je geen bson-pakket hebt, moet je het installeren door iets te doen als pip install bson




  1. Mongodb 3.0 java insertOne

  2. Geaggregeerde mongo-gegevens php

  3. Plan Node.js-taak elke vijf minuten

  4. MongoDB geaggregeerde retourtelling van 0 als er geen resultaten zijn