Mongodb查询字符串数组,看是否包含关键字

时间:2015-10-31 01:16:32

标签: arrays json mongodb search

我正在建立一个电子商务网站,并使用Mongodb进行产品收集。有了这个产品,我有两个领域:

taxonomies: ['clothes', 'female', 'fashion']
attributes: [{'color': 'red'}, {'size': 'large'}, ...]

现在,当用户尝试通过输入某个关键字来搜索产品时,我想查询文档,以查看产品的分类或属性的任何元素是否包含该搜索关键字。

我们说搜索关键字是' fa',因为我上面提供的产品作为一个例子具有' fashion'包含' fa'的分类,此产品应包含在搜索结果中。这同样适用于属性。那我怎么能做到呢?

1 个答案:

答案 0 :(得分:3)

分类法是一个数组,属性是一个对象数组。使用$or:$regex:的组合,如下所示:

var searchRe = /.*fa.*/; // create your regular expression, in this case contains
db.products.find({ $or: [
  { taxonomies: { $elemMatch: { $regex: searchRe }}},
  { attributes: { $or: [
    { $elemMatch: { color: { $regex: searchRe }}},
    { $elemMatch: { size: { $regex: searchRe }}} // you can add additional attributes to search here
    ]}
  }
]});