显示mongodb中字段值部分匹配的文档

时间:2017-10-03 14:18:05

标签: node.js mongodb express mongoose

以下是我的电影架构:

  "_id" : ObjectId("59b9501600fcb397d6acd5bb"),
     "theatreid" : 2,
"name" : "carnival cinemas",
"location" : "kanjulmarg",
  "address" : "sec 2,kanjul, Mumbai, Maharashtra 400703",
"shows" : [
  {
          "mname" : "bareily ki barfi",
          "timings" : [
                  10,
                  13,
                  14,
                  16,
                  22
          ]
  },

  {
          "mname" : "Toilet:ek prem katha",
          "timings" : [
                  8,
                  9,
                  14,
                  16,
                  20,
                  23
          ]
  }
 ]


 "_id" : ObjectId("59b9506500fcb397d6acd5bc"),
   "theatreid" : 3,
 "name" : "pheonix pvr",
 "location" : "kurla",
 "address" : "sec 26,kurla, Mumbai, Maharashtra 400701",
"shows" : [
  {
          "mname" : "shubh mangal savdhan",
          "timings" : [
                  9,
                  11,
                  15,
                  18,
                  20
          ]
      },
  {
          "mname" : "Toilet:ek prem katha",
          "timings" : [
                  8,
                  9,
                  14,
                  16,
                  20,
                  23
          ]
  }
]

我的查询是显示所有显示时间(shows.timings)大于20且位置为kurla的影院。我正在使用nodeJS。 查询如下:

 user.aggregate([{$match:{"location":"kurla"}},{"$addFields": {"shows": {"$map": {"input": "$shows","as": "resultm","in": {"name": "$$resultm.name","mname": "$$resultm.mname","timings": {"$filter": {"input": "$$resultm.timings","as": "resultf","cond": {"$gte": ["$$resultf",10]}}}}}}}}])

当它获得 location =" kurla" 的完全匹配时,这可以正常工作,但我希望即使位置它也可以工作并显示相同的记录= kurla east,maharashthra,mumbai 。即使在我的收藏品的location属性中找到了部分匹配。这怎么办呢!请帮忙。感谢:)

1 个答案:

答案 0 :(得分:0)

使用$regex运算符对location属性应用部分文本匹配。

替换此......

{$match:{"location":"kurla"}}

......用这个:

{ $match: {location: { $regex: /^kurla/ } } }

在上面的示例中,条件为location like 'kurla%'

更多详情in the docs

这假设您希望过滤的值都在location字段中,这与您问题中的以下陈述一致:

  

location = kurla east,maharashthra,mumbai

没有" maharashthra"或"孟买"然而,在您展示的示例文档的location字段中," maharashthra"确实显示在address属性中,因此,如果您的过滤器实际应用于location和/或address,则解决方案将与我上面发布的内容不同。如果是这种情况,也许您可​​以更新您的问题以澄清。