【问题标题】:return documents that match from an array using mongoose使用 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 是一个坏主意。
  • 我的示例中没有循环。它一次查询所有关键字。至于如何提取它们,这是一个超出此处范围的特定领域问题(我们不知道您的应用程序中的“关键字”是什么)。首先,您可以简单地将字符串拆分为空格,以便所有单词都是关键字。

标签: javascript node.js mongodb mongoose


【解决方案1】:
db.model.find(
    {
        'keywords': {
            $elemMatch: {
                $elemMatch: {
                    $in: ['Time', 'Family']
                }
            }
        }
    },
    {
        "values.$": 1
    }
)

【讨论】:

  • 为什么是嵌套的 elemMatch?
  • 此外,根本不需要使用 elemMatch。数组元素不是对象,查询是简单相等之一。 find({"keywords": {$in: ['Time', 'Family']}}) 应该可以正常工作。
猜你喜欢
  • 1970-01-01
  • 2019-01-16
  • 1970-01-01
  • 2019-04-23
  • 2020-02-19
  • 2021-01-09
  • 2014-05-16
  • 2019-04-28
  • 2021-06-18
相关资源
最近更新 更多