sql >> Databáze >  >> NoSQL >> MongoDB

Jak zapsat podmínku shody pro hodnoty pole?

Ok, můžete to udělat dvěma způsoby:

Jak máte toto:

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

Musíte převést svůj seznam řetězců na seznam ObjectId pomocí python kódu:

from bson.objectid import ObjectId


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


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

Bude to vypadat takto:[ObjectId('5d76b2c847c8d3000184a090'),ObjectId('5d7abb7a97a90b0001326010')]

poté pomocí nového seznamu my_list , můžete zadat dotaz takto:

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

Nebo jiným způsobem, který bych neupřednostňoval, protože převod jen několika v kódu je snazší ve srovnání s n num hodnot pro userid pole přes všechny dokumenty v DB, ale pro případ, že chcete, aby to bylo provedeno pomocí dotazu DB:

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

Poznámka: V případě, že nemáte balíček bson, musíte jej nainstalovat provedením něčeho jako pip install bson




  1. Existuje komponenta Polymer, která zjednodušuje komunikaci s MongoDB?

  2. MongoDB načte pouze odpovídající dílčí dokumenty z dokumentu s c#

  3. Jak povolím profilování v node-mongodb-native?

  4. Mongoose.aggregate(pipeline) propojuje více kolekcí pomocí $unwind, $lookup, $group