2017-05-10 63 views
0

提前致谢。 我有如下猫鼬模式:Mongoose Mongodb

var bookSchema = new mongoose.Schema({ 
    name: { type: String, index: true, default: '' }, 
    text: { type: String, index: true, default: '' }, 
    date: { type: Date, default: Date.now }, 
    price: { type: Number, default: 0 } }); 

bookSchema.index({text: 1, name: 1}, {unique: true}); 

我的问题是,当我搜索中指定的字段中的任何文本“文本”这是行不通的。可能是命名冲突,我必须到外地名称更改为文本以外的东西......

Book.find({ $text : { $search : 'mongoose is great' } })... 
+0

你得到了什么错误,你如何定义模型? –

+0

我发现的一个大问题是我需要重新启动MongoDB服务器......(doh!)。我写了一个简短的函数bookSchema.pre('save',function(next){this.searchable = this.text +''+ this.name; next();});在一个新字段中包含所有可搜索的内容。 – Mendo

+0

@Mendo添加索引时不需要重新启动MongoDB,也不需要为使用文本索引进行搜索创建单独的字段,并且标记为正确的答案也不正确。坏信息超载!你可能应该重新尝试一下。 – JohnnyHK

回答

1

text是MongoDB中的保留字。不要使用这个词,尝试与另一个。

+0

这是不对的;使用名为“text”的字段没有任何问题。 – JohnnyHK

0

感谢您的帮助。

我遇到的问题是一个小而痛苦的教训。事实证明,我进入了我的mLabs控制台,发现收集的索引总数超过了16个! 因此删除了所有这些,并添加了我需要的。事情变得很好,解决了我的问题。

所以我猜测,如果你不断添加索引而不删除先前的索引,你最终会得到不可预测的结果。

再次感谢所有回答。