Mongoose数组到数组搜索功能

时间:2014-12-28 17:42:34

标签: node.js mongodb mongoose

我正在为阵列搜索功能制作一个数组。我的架构看起来像这样:

var PostSchema = new Schema({
  title: String,
  pieces: Array,
  category: Schema.ObjectId
});

pieces字段是title字段的数组,但它已被title.split(' ');拆分为多个部分。

因此,如果标题如下所示:Lorem ipsum doler sit amet这些内容如下所示:[ 'Lorem', 'ipsum', 'doler', 'sit', 'amet' ]

现在我有了这个搜索功能,我将搜索输入分开,我想检查pieces字段,以便找到最佳结果。 如果我搜索Lorem doler amet,则会变为[ 'Lorem', 'doler', 'amet' ]

我尝试这样做的方法是通过以下代码:

var searchString = req.body.searchString;
Post
 .find({})
 .where('pieces').in(searchString.split(' ')) // The pieces must have ALL of the items from splitted searchString.
 .limit(30)
 .select('-_id -_v -pieces')
 .exec(function (err, posts) {
   // Do stuff
});

但它似乎根本不起作用。关于如何使用Mongoose进行搜索功能的任何线索?

简化我尝试做的事情:

check if [ 'Lorem', 'ipsum', 'doler', 'sit', 'amet' ] contains ALL of [ 'Lorem', 'doler', 'amet' ]

2 个答案:

答案 0 :(得分:3)

我相信你所寻找的是$all运营商。您的猫鼬代码应如下所示:

var searchString = req.body.searchString;
Post
 .find({})
 .where('pieces').all(searchString.split(' '))
 .limit(30)
 .select('-_id -_v -pieces')
 .exec(function (err, posts) {
   // Do stuff
});

我希望它有所帮助。

答案 1 :(得分:2)

您可以使用$all对必须包含所有指定元素集的数组字段执行查询。

在Mongoose中,您可以使用Query#all执行此操作:

Post
 .find({})
 .where('pieces').all(searchString.split(' '))
 .limit(30)
 .select('-_id -_v -pieces')
 .exec(function (err, posts) {
   // Do stuff
});