我使用mongoose从MongoDB中检索数据时遇到了以下问题。
这是我的模式(Schema):
const BookSchema = new Schema(
{
_id:Number,
title:String,
authors:[String],
subjects:[String]
}
);
正如您所见,我在对象中嵌入了2个数组,假设作者的内容可能是这样的:authors:["Alex Ferguson", "Didier Drogba", "Cristiano Ronaldo", "Alex"]
我想要实现的是获取数组中所有名字为Alex的项。
到目前为止,如果值完全匹配,我已经能够获取值。但是,如果我尝试获取包含Alex的项,那么答案始终为[]。
我想知道的是如何使用find()来做到这一点,而不必执行一个map-reduce来创建视图或集合,然后应用find()。
这里的代码适用于完全匹配的情况。
Book.find( {authors:req.query.q} , function(errs, books){
if(errs){
res.send(errs);
}
res.json(books);
});
我尝试了一些方法,但都没有运气。{authors:{$elemMatch:req.query.q}} 和 {authors:{$in:[req.query.q]}}。
这个方法给我一个错误,并且在另一篇文章中说它非常低效。{$where:this.authors.indexOf(req.query.q) != -1}
我还尝试过 {authors:{$regex:"./value/i"}}。
Map-reduce可以正常工作,我需要使用另一种方法使其工作,以查看哪种方法更好?
非常感谢任何帮助。我确定这很容易,但我是NodeJS和MongoDB的新手,一直没有自己解决问题。