【发布时间】:2015-01-05 00:35:33
【问题描述】:
我在使用 mongoose 从 MongoDB 检索数据时遇到以下问题。
这是我的架构:
const BookSchema = new Schema(
{
_id:Number,
title:String,
authors:[String],
subjects:[String]
}
);
如您所见,我在对象中嵌入了 2 个数组,假设作者的内容可以是这样的:作者:[“亚历克斯弗格森”,“迪迪埃德罗巴”,“克里斯蒂亚诺罗纳尔多”,“亚历克斯” ]
我想要实现的是获取数组中的所有 Alex。
到目前为止,如果它们完全匹配值,我已经能够获取这些值。但是,如果我尝试获取包含 Alex 的答案,则答案始终是 []。
我想知道的是如何使用 find() 来做到这一点,而无需执行 map-reduce 来创建视图或集合,然后在其上应用 find()。
此处的代码适用于完全匹配
Book.find( {authors:req.query.q} , function(errs, books){
if(errs){
res.send(errs);
}
res.json(books);
});
我尝试了一些东西,但没有运气 {作者:{$elemMatch:req.query.q}} {作者:{$in:[req.query.q]}}
这给了我一个错误,最重要的是,在我在这里找到的另一篇文章中说效率很低。 {$where:this.authors.indexOf(req.query.q) != -1}
我也试过 {authors:{$regex:"./value/i"}}
map-reduce 工作正常,我需要使用另一种方法使其工作,看看哪个更好?
非常感谢任何帮助。我确信这很容易,但我是 NodeJS 和 Mongo 的新手,我自己无法弄清楚。
【问题讨论】:
标签: regex node.js mongodb mongodb-query aggregation-framework