【问题标题】:How to match a String in array of elements in MongoDB如何匹配MongoDB中元素数组中的字符串
【发布时间】:2020-02-23 22:52:32
【问题描述】:

我有一个示例数据,如下所示,我想提取结果,其中只包含包含 Volvo 的数据。

[
  'Volvo Sedan',
  'Volvo SUV',
  'Volvo Premium',
  'Volvo Sport',
  'Honda Sedan',
  'Honda SUV',
  'Honda Premium',
  'Honda Sport'
]

我尝试了类似的方法,但没有返回任何结果。谁能指导如何实现它?

db.cars.distinct('carType', {carType: {$in: [/Volvo/]}})

【问题讨论】:

    标签: arrays string mongodb robo3t


    【解决方案1】:

    首先$in 用于比较文档中字段的值与查询中的项目数组,而不是其他方式。例如。选择至少有一个与/Volvo/ 匹配的carType 的所有文档就足够了

    db.cars.distinct('carType', {carType: /Volvo/})
    

    其次,distinct 对文档进行操作。首先,它应用过滤器匹配在 carType 数组中具有 至少一个 Volvo 的文档,然后在这些文档中获取 all carType 并合并到具有唯一值的单个数组中。例如。如果您有带有 carTypes 的文档

    [
      'Volvo Sedan',
      'Volvo SUV',
      'Volvo Premium',
      'Volvo Sport',
      'Honda Sedan',
      'Honda SUV',
      'Honda Premium',
      'Honda Sport'
    ]
    

    第一项与 /Volvo/ 匹配,因此它们都将包含在结果中。


    假设您要检索具有与您的正则表达式匹配的唯一 carTypes 的列表,您需要使用聚合框架。例如:

    db.cars.aggregate([
        {$unwind: "$carType"},
        {$match: {carType: /Volvo/}},
        {$group: {_id: "$carType"}}
    ])
    

    【讨论】:

      猜你喜欢
      • 2021-05-14
      • 2020-04-04
      • 2017-10-11
      • 1970-01-01
      • 1970-01-01
      • 2015-03-21
      • 2018-06-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多