【问题标题】:mongodb array query for search bar搜索栏的mongodb数组查询
【发布时间】:2020-05-22 09:07:42
【问题描述】:

我正在尝试返回所选字段数组中至少有一个元素与查询数组匹配的文档。

我尝试了以下查询:

const match_equipment = await studios.find({equipment: {$eleMatch:{$in: ["mic","amp"]}}});
const match_equipment = await studios.find({equipment: {$all: ["mic","amp"]}});

第一个查询给我“db query failed error”第二个给我“no result found”。

示例文档:

{
    "_id": {"$oid": "5ec5d38be97c8869bee29e78"},
    "equipment": ["guitar", " mic", " amp"],
    "studio_name": "Best recordings",
    "email": "changed@gmail.com",
    "address": "34 harming st. Brunswick",
    "postcode": "3056",
    "price": "50",
    "__v": {"$numberInt": "0"},
    "unavalibility": [
        {
            "times": [{"$numberInt": "13"}],
            "_id": {"$oid": "5ec610e47cf2fb4e84ba0c54"}, "date": {"$date": {"$numberLong": "1591920000000"}}
        }
    ]
}

【问题讨论】:

  • 第二个应该可以工作,你可以在这里看到一个工作示例 - mongoplayground.net/p/l8tqUZY5xAU
  • 请不要将图像用于代码或文本,而是将相关的代码片段或列表添加到您的问题中。
  • 对不起第一次代码;不知道它应该如何工作。我将复制粘贴我的代码
  • @PuneetSingh 谢谢!我发现了问题,我的文档实际上在“mic”之前有一个空格作为“mic”。我会尝试添加正则表达式!
  • 抱歉后续问题,我应该如何为模糊搜索添加正则表达式?我对它不是很熟悉,但试过这没有用。 stackoverflow.com/questions/38421664/… 例如。当查询有“drums”“drumset”时,如果我想要带有“DRUM”或“drum”的文档都可以找到?

标签: javascript jquery node.js mongodb searchbar


【解决方案1】:

你很接近,只是语法错误。

这是$elemMatch 而不是eleMatch

所以改变它会起作用:

const match_equipment = await studios.find({equipment: {$elemMatch:{$in: ["mic","amp"]}}});

$elemMatch的本质是更专业的查询。在您的情况下,这不是必需的。所以你可以只使用$in的以下版本:

const match_equipment = await studios.find({equipment: {$in: ["mic","amp"]}});

【讨论】:

    猜你喜欢
    • 2015-06-29
    • 1970-01-01
    • 2015-07-17
    • 2020-11-21
    • 1970-01-01
    • 1970-01-01
    • 2021-12-19
    • 2014-04-19
    • 2022-10-05
    相关资源
    最近更新 更多