【问题标题】:How to find collections which containing specific string in MongoDB?如何在 MongoDB 中查找包含特定字符串的集合?
【发布时间】:2019-05-31 05:25:53
【问题描述】:

我有一个名为 user 的 MongoDB 集合。特定用户只有一个名为 name 的属性。 我需要查找名称与给定字符串匹配的用户。例如,如果我的用户集合包含两个文档,如下所示。

{
    "_id" : ObjectId("5c9204b974c01413c0f87yu87"),
    "name" : "Micheal",
    "createdAt" : ISODate("2019-03-20T09:15:37.220Z"),
    "updatedAt" : ISODate("2019-03-20T09:15:37.220Z")
}

{
    "_id" : ObjectId("5c92050c74c01413c0f7ue64"),
    "name" : "Karthik",
    "createdAt" : ISODate("2019-03-20T09:17:00.028Z"),
    "updatedAt" : ISODate("2019-03-20T09:17:00.028Z")
}

如果我的搜索词是 Mical,我需要接收名为 Micheal 的用户文档作为结果。如果我的搜索词是 kark,我需要接收名为 Karthik 作为结果的用户文档。

下面我已经试过了。

User.find({ "name" : { $regex : ".*Mical.*" }})....

User.find({ name: { $in: ["Mical"] }})....

但以上都对我不起作用。非常感谢任何帮助。

【问题讨论】:

  • User.find({ "name": { $regex: "^Mic.*al" }}) 适用于 Mical 和 User.find({ "name": { $regex: "^Kar.*k" }}) 对于 Karthik 案例

标签: node.js mongodb sails.js


【解决方案1】:

您可以使用以下任何语法

User.find({ name: /Mic.*al/ });

User.find({ name: new RegExp('Mic.*al', 'i') });

【讨论】:

  • 感谢您的回答。但这对我不起作用。
  • @karthikthurairaja:更新了答案。我最初误读了您想要的输出。
【解决方案2】:

这可以通过 MongoDB 中的 $text 运算符来实现。但是您必须在数据库中的“名称”字段上创建索引。

db.User.createIndex({"name":"text"})

然后你可以传递任何查询,例如,

db.User.find({$text: {$search: "kark"}})

这里的“$text”是mongo操作符。 这将返回具有上述任何关键字的所有文档。

参考:MongoDb $text

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-07
    • 2012-10-19
    • 2019-11-25
    • 2022-01-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多