我在mongoose上设置了以下Schema
{
_id:
store:
offers:[{
name:
price:
}]
}
我决定将offers.name编入索引如下
uniSchema.index({'offers.name':'text'});
现在我正在尝试对该索引进行搜索
Stores.find({$text:{$search:VALUE}}, callback);
但是这样一来,只要搜索到了整个商店,我就无法确定匹配来自哪个商品。
有没有办法用mongoose上的索引做到这一点?弄清楚哪个数组元素与查询匹配?
答案 0 :(得分:0)
我不确定$text
索引是否可行。
使用直接查询,您可以使用投影执行相同的操作:
> db.array_find.find({ "offers.name": "firstname"},{"offers.$" : 1} )
但是文本查询不直接引用数组,因此无法在投影中使用offers.name
。
> db.array_find.find({ $text: { $search: "firstname"} },{"offers.$" : 1} )
error: {
"$err" : "Can't canonicalize query: BadValue Positional projection 'offer.$' does not match the query document.",
"code" : 17287
}
从结果文档尝试任何类型的数组后处理的问题是你不会使用mongo的文本索引,而是使用它的一些近似值。
您可能需要不同的数据结构
_id:
store: 2
offer:
name: this is a single offer
price: 4
_id:
store: 2
offer:
name: this is the next offer
price: 5