MongoDB/Mongoose-仅返回与$text匹配的数组项

MongoDB/Mongoose-仅返回与$text匹配的数组项,mongodb,mongoose,full-text-search,Mongodb,Mongoose,Full Text Search,我的目标如下: 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] }} ] } 我需要执行只返回项

我的目标如下:

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" } });
{ name: { $regex: /acme.*corp/i, $nin: [ 'acmeblahcorp' ] } }
这管用!但它也会返回裤子,因为它返回的是用户,而不仅仅是数组项。这就是问题所在,我需要对数据库中的项目进行分页。因此,我只需要返回与$text搜索匹配的数组项。我知道,如果items本身是一个集合,那么它就可以工作,但在我的例子中,我需要在用户内部使用它们,因为我将$text用于items,而$geointen用于places

那么,如何返回仅保留与我的$text搜索匹配的项目的用户?

您是否尝试使用regex 要在字段查询条件的逗号分隔列表中包含正则表达式,请使用$regex运算符。例如:

await User.find({ $text: { $search: "shoes" } });
{ name: { $regex: /acme.*corp/i, $nin: [ 'acmeblahcorp' ] } }
或smth类

db.users.find({"name": /^m/})
您是否尝试使用正则表达式 要在字段查询条件的逗号分隔列表中包含正则表达式,请使用$regex运算符。例如:

await User.find({ $text: { $search: "shoes" } });
{ name: { $regex: /acme.*corp/i, $nin: [ 'acmeblahcorp' ] } }
或smth类

db.users.find({"name": /^m/})

我对正则表达式不是很熟悉。它是用作文本搜索还是仅在字符串完全相同的情况下查找?例如:如果我有一件名为“Mario T恤”的物品,用户搜索“Mario”,regex能找到吗?我对regex不太熟悉。它是用作文本搜索还是仅在字符串完全相同的情况下查找?例如:如果我有一个名为“Mario T-Shirt”的项目,用户搜索“Mario”,regex能找到吗?很好的问题。但我想知道是否有一种很好的方法可以解决这个问题,而不必将物品单独收藏。您可以使用查找聚合来加入用户和项目,因此将它们组合在一起不是问题。您的意思是,创建一个将用户和衣服合并为两个不同集合的视图,并查询此视图?我的意思是,甚至是mongoose populateOk,我将尝试一下。谢谢你的问题。但我想知道是否有一种很好的方法可以解决这个问题,而不必将物品单独收藏。您可以使用查找聚合来加入用户和项目,因此将它们组合在一起不是问题。您的意思是,创建一个将用户和衣服合并为两个不同集合的视图,并查询此视图?我的意思是,甚至是mongoose populateOk,我将尝试一下。谢谢