【发布时间】:2020-07-15 17:01:07
【问题描述】:
我有以下对象:
user: {
_id: "xxx",
name: "Lucas",
items: [
{ name: "shoes", description: "nice shoes" },
{ name: "pants", description: "old pants" },
],
places: [
{name: "my house", loc: { type: "Point", coordinates: [-27, -43] }}
]
}
我需要执行仅返回项目的文本搜索 ($text)。 例如:
await User.find({ $text: { $search: "shoes" } });
这行得通!但它也返回裤子,因为它返回用户而不仅仅是数组项。这就是问题所在,我需要对数据库中的项目进行分页。所以我只需要返回与 $text 搜索匹配的数组项。我知道如果 items 本身是一个集合,它会起作用,但在我的情况下,我需要用户内部的那些,因为我将项目的 $text 和位置的 $geoWithin 组合在一起。
那么,我如何返回用户只保留与我的 $text 搜索匹配的项目?
【问题讨论】:
-
好问题。但我想知道是否有很好的方法来解决这个问题而不将项目放在单独的集合中。您可以使用查找聚合来连接用户和项目,因此将它们组合起来没有问题。
-
您的意思是,创建一个将用户和衣服作为 2 个不同集合的视图,然后查询该视图?
-
我的意思是 lookup aggregation 甚至是猫鼬填充
-
好的,我试试看。谢谢
标签: mongodb mongoose full-text-search