我正在尝试使用全文搜索。这样设置索引
myRootSchema.index({ "_type": 1, "$**": "text" });
其中 _type 是 discriminatorKey,myRootSchema 是 4 个继承模式的父模式。
我收到这个错误
{
"name": "MongoError",
"message": "error processing query: ns=MYDB.caseNotesTree: TEXT : query=title, language=english, caseSensitive=0, diacriticSensitive=0, tag=NULL\nSort: {}\nProj: {}\n planner returned error: failed to use text index to satisfy $text query (if text index is compound, are equality predicates given for all prefix fields?)",
"waitedMS": 0,
"ok": 0,
"errmsg": "error processing query: ns=MYDB.caseNotesTree: TEXT : query=title, language=english, caseSensitive=0, diacriticSensitive=0, tag=NULL\nSort: {}\nProj: {}\n planner returned error: failed to use text index to satisfy $text query (if text index is compound, are equality predicates given for all prefix fields?)",
"code": 2
}
尝试这个查询
Model
.find(
{ $text : { $search :req.query.q } }
)
.exec(function(err, data) {
if(err)res.json(err)
res.json(data)
});
EDIT:按照建议,我应该在查询中设置 _type 字段,但 _type 是“自动填充”,因为它是一个鉴别器。具有单个 _type 的查询可以工作,但我不需要它,我必须查询 4 个继承的模型。
我什至尝试了 $or,但无法解决相同的错误。
Model
.find(
{ $or: [ { _type: 'childA' },
{ _type: 'childB' },
{ _type: 'childC' },
{ _type: 'childD' }
], $text : { $search :req.query.q } }
)
.exec(function(err, data) {
if(err)console.log(err)
res.json(data)
});