3

我正在使用 MongoDB 存储有关咖啡的信息,但我遇到了查询问题。

我的文档结构是:

{ _id: "Thailand Bok", tags: ["Strong", "Smooth", "Dark"] }

我正在尝试创建允许我搜索名称或标签的查询。

因此,鉴于查询字符串可能是“Thailand Bok”或 [“Strong”、“Smooth”],我想搜索包含 _id 或每个标签的请求。

如果我用 SQL 术语思考,它可能是这样的:

"WHERE `_id` like 'Not present%' OR ("Strong" IN `tags` AND "Smooth" IN `tags`)"

到目前为止我的查询是:

{ 
    $or: [
      { _id: { $regex: '^Not present', '$options': 'i' } },
      { 
          $and: [ 
              { tags: 'Strong' }, 
              { tags: 'Smooth' } 
          ]
      }
    ]
}

编辑:更正查询中的错误并澄清如果_id匹配或标签匹配它应该工作

4

2 回答 2

7

$and 仅在 MongoDB 2.0+ 版本中受支持,我使用的是 1.8.2

于 2012-04-29T13:46:43.077 回答
5

您的查询似乎没问题,除了 $or 使用花括号而不是方括号。

{$or: [
  {_id: {$regex: '^hailand', $options: 'i'} }, 
  {'$and': [
       {tags: 'Strong'}, 
       {tags: 'Smooth'}
   ]}
]}

工作得很好。

于 2012-04-29T13:21:18.303 回答