我正在建立一个电子商务网站,并使用Mongodb进行产品收集。有了这个产品,我有两个领域:
taxonomies: ['clothes', 'female', 'fashion']
attributes: [{'color': 'red'}, {'size': 'large'}, ...]
现在,当用户尝试通过输入某个关键字来搜索产品时,我想查询文档,以查看产品的分类或属性的任何元素是否包含该搜索关键字。
我们说搜索关键字是' fa',因为我上面提供的产品作为一个例子具有' fashion'包含' fa'的分类,此产品应包含在搜索结果中。这同样适用于属性。那我怎么能做到呢?
答案 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
]}
}
]});