MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

Jak napisać warunek dopasowania dla wartości tablicowych?

Ok, możesz to zrobić na dwa sposoby:

Jak masz to :

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

Musisz przekonwertować swoją listę ciągów na listę ObjectId za pomocą kodu Pythona:

from bson.objectid import ObjectId


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


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

Będzie wyglądać tak :[ObjectId('5d76b2c847c8d3000184a090'),ObjectId('5d7abb7a97a90b0001326010')]

następnie używając nowej listy my_list , możesz wykonać zapytanie w ten sposób:

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

Lub w inny sposób, którego nie wolałbym, ponieważ konwersja tylko kilku w kodzie jest łatwiejsza w porównaniu z liczbą n wartości dla userid pole nad wszystkimi dokumentami w DB, ale na wszelki wypadek, jeśli chcesz to zrobić za pomocą zapytania DB:

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

Uwaga: W przypadku, gdy nie masz pakietu bson, musisz go zainstalować, wykonując coś takiego jak pip install bson




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Przesyłanie strumieniowe wyniku operacji agregowanej za pomocą spring-data-mongodb

  2. Nie można znaleźć dokumentów przeszukujących według ObjectId przy użyciu Mongoose

  3. mongodb jak uzyskać maksymalną wartość z kolekcji

  4. Mongo MapReduce wybierz ostatnią datę

  5. Jak zaktualizować poddokument Mongoose w metodzie instancji?