使用 mongoose 从数组中返回匹配的文档
Posted
技术标签:
【中文标题】使用 mongoose 从数组中返回匹配的文档【英文标题】:return documents that match from an array using mongoose 【发布时间】:2021-08-20 15:09:02 【问题描述】:所以基本上我有一串消息,我想获得与 关键字
匹配的文档要匹配的标签:时间、家庭
const sample_message = "This user have a challenge of Time and Family"
document_1 =
challenge: Object ID 1
keywords: [ "Time", "Test" ]
document_2 =
challenge: Object ID 2
keywords: [ "Family", "Test2" ]
document_3 =
challenge: Object ID 3
keywords: [ "Foo", "Test3" ]
const result = model.find(keywords: new Regexp(sample_message) )
console.log(result)
我需要返回所有与 sample_message 中的关键字匹配的文档,即“时间”和“家庭”。有人能解释一下正确的方法吗?
【问题讨论】:
那么,这里的拦截器是什么? 应该像let keywords = extract_keywords(sample_message); model.find(keywords: keywords)
一样简单
基本上我需要将匹配关键字的文档返回到sample_message。我需要有人解释正确的方法。
@SergioTulentsev 但我将如何提取关键字。我相信使用 find all 和 for 循环关键字来匹配 sample_message 是一个坏主意。
我的示例中没有循环。它一次查询所有关键字。至于如何提取它们,这是一个超出此处范围的特定领域问题(我们不知道您的应用程序中的“关键字”是什么)。首先,您可以简单地将字符串拆分为空格,以便所有单词都是关键字。
【参考方案1】:
db.model.find(
'keywords':
$elemMatch:
$elemMatch:
$in: ['Time', 'Family']
,
"values.$": 1
)
【讨论】:
为什么是嵌套的 elemMatch? 此外,根本不需要使用 elemMatch。数组元素不是对象,查询是简单相等之一。find("keywords": $in: ['Time', 'Family'])
应该可以正常工作。以上是关于使用 mongoose 从数组中返回匹配的文档的主要内容,如果未能解决你的问题,请参考以下文章
在 Mongoose/MongoDB 的文档中过滤数组、子文档、数组、文档
根据Mongoose中的其他属性返回数组值和分组的匹配记录?