获取与文本索引查询匹配的数组中的元素

时间:2015-10-08 01:05:58

标签: node.js mongodb indexing mongoose full-text-indexing

我在mongoose上设置了以下Schema

{
    _id:
    store:
    offers:[{
        name:
        price:
    }]
}

我决定将offers.name编入索引如下

uniSchema.index({'offers.name':'text'});

现在我正在尝试对该索引进行搜索

Stores.find({$text:{$search:VALUE}}, callback);

但是这样一来,只要搜索到了整个商店,我就无法确定匹配来自哪个商品。

有没有办法用mongoose上的索引做到这一点?弄清楚哪个数组元素与查询匹配?

1 个答案:

答案 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