How to write match condition for array values?

前端 未结 1 807
感动是毒
感动是毒 2021-01-25 06:47

I have stored values in multiple variables. below are the input variables.

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


        
相关标签:
1条回答
  • 2021-01-25 07:11

    Ok you can do it in two ways :

    As you've this :

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

    You need to convert your list of strings to list of ObjectId's using python code :

    from bson.objectid import ObjectId
    
    
    disuid = ['5d76b2c847c8d3000184a090', '5d7abb7a97a90b0001326010']
    my_list = []
    
    
    for i in disuid:
        my_list.append(ObjectId(i))
    

    It will look like this : [ObjectId('5d76b2c847c8d3000184a090'),ObjectId('5d7abb7a97a90b0001326010')]

    then by using new list my_list, you can do query like this :

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

    Or in the other way which I wouldn't prefer, as converting just few in code is easier compared to n num of values for userid field over all documents in DB, but just in case if you want it to be done using DB query :

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

    Note : In case if you don't have bson package, then you need to install it by doing something like pip install bson

    0 讨论(0)
提交回复
热议问题