使用 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中的其他属性返回数组值和分组的匹配记录?

如何从 mongoose 的 mongo 文档中返回一个数组?

Mongoose 获取与数组匹配的文档

Mongoose 获取与数组匹配的文档

将新对象插入到 mongoose 中的子文档数组字段中