如果我有这个Dishes Schema,我想搜索本文档的成分,评论,类别和步骤,我该如何搜索。
var DishesSchema = new Schema({
created_at: {
type: Date,
default: Date.now
},
created_by: {
type: Schema.ObjectId,
ref: "User"
},
title: String,
description: String,
comments: [{ type: Schema.ObjectId, ref: 'Comment' }],
body: String,
picture: [String],
main_picture: String,
likes: [{
type: Schema.ObjectId,
ref: "User"
}],
ingredients: [{ type: Schema.ObjectId, ref: 'Ingredient' }],
categories: [{ type: Schema.ObjectId, ref: 'Category' }],
steps: [String]
});
我找到了搜索成分,评论,类别但如何搜索步骤的方法
Dishes.find().or([
{ 'ingredients.name': new RegExp(name, "i") },
{ description: new RegExp(name, "i") },
{ body: new RegExp(name, "i") },
{},
]).limit(10).exec(function (err, docs) {
if (err){
response.json('error', err)
}
else{
response.json('info', docs)
}
})
感谢您提前!
答案 0 :(得分:1)
首先,在数组中搜索匹配与搜索普通字符串相同。 Mongo非常聪明,可以看到该属性是一个数组并搜索它的内容。 ...
Dishes.find({steps: new RegExp(name, "i")})
...将按照您的期望/期望工作。
第二点,对于评论,成分,类别,您的架构设计有由ObjectId
相互引用的单独集合。 Mongo不能像关系数据库那样进行连接,因此上面的查询永远不会匹配任何内容。任何给定的mongo操作都将只查看一个集合。您需要单独搜索每个集合,然后找到相应的Dish
记录,或重新设计您的架构以使用嵌套文档而不是引用。