如何使用pymongo by语句从mongoDB中查找文档-〈if there is a key containing certain string“X”>

afdcj2ne  于 2023-03-29  发布在  Go
关注(0)|答案(2)|浏览(154)
{    
    "_id" : ObjectId("639789e84500571417ii9343"),
    "72uebaa27279b22p348e61870a6a8840something" : [ 
        {
            "price" : 130,
            "date" : 1670874476
        }, 
        {
            "price" : 107,
            "date" : 1672258500
        }
    ]
}

我需要找到第二个键包含字符串“something”的所有文档。
我只找到了一种方法,通过“$exists”键名来查找,但我无法通过上面提到的语句找到文档。

jogvjijk

jogvjijk1#

您可以使用以下方法在MongoDB中使用“like”regex执行查询:

  • 方法1:查找包含字符串的文档
db.collection.find({name: {$regex : /string/i}})

请注意,i表示不区分大小写的匹配。

  • 方法2:查找以字符串开头的文档
db.collection.find({name: {$regex : /^string/i}})
  • 方法3:查找以字符串结尾的文档
db.collection.find({name: {$regex : /string$/i}})
dsf9zpds

dsf9zpds2#

无法使用子字符串或正则表达式查询字段名。
使用聚合可以做到这一点,但这不是索引可以帮助的,所以它可能不会很好地执行,并且不会很好地扩展,因为每个这样的查询都必须检查和处理集合中的每个文档。
管道需要:

  • 将对象转换为数组,以便将字段名视为数据
  • 符合要求的标准
  • 删除临时字段或重建对象
db.collection.aggregate([
  {$addFields:{ arraydoc: {$objectToArray: "$$ROOT"}}},
  {$match: { "arraydoc.k": {$regex: "something"}}},
  {$project:{ arraydoc: 0}}
])

Playground

相关问题