我正在为阵列搜索功能制作一个数组。我的架构看起来像这样:
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' ]
答案 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)