Tengo una base de datos con documentos con este formato:
document1: "source_dir": [ "D:\dir1", "D:\dir2" ] document2: "source_dir": [ "D:\dir3", "D:\dir4" ]Y en Python tengo esta variable de ruta:
path = "D:\dir1\testFile.txt"¿Cómo puedo consultar la base de datos usando la variable "ruta" para que el valor devuelto sea el documento cuyo campo de matriz "source_dir" contiene un elemento que coincide con el inicio del contenido de la variable de ruta?
En este caso, el valor devuelto sería document1, ya que su campo source_dir contiene D:\dir1 y la ruta comienza con D:\dir1.
Gracias.
Puede utilizar el operador de agregación $indexCP para buscar una cadena en busca de una subcadena. El truco aquí es invertir la búsqueda, usando el valor source_dir para buscar en la variable.
Por ejemplo:
fullpath = "D:\\dir1\\testFile.txt" pipeline = [ {"$unwind": "$source_dir"}, {"$match":{ "$expr":{ "$ne":[{"$indexOfCP":[fullpath, "$source_dir"]}, -1] }}}] result = client.dbname.collname.aggregate(pipeline) for doc in result: print(doc)Consulte también canalización de agregación para encontrar más operadores