如何过滤在其属性之一中包含某些字符串的mongo文档?

时间:2018-10-12 07:54:15

标签: mongodb mongoose loopbackjs

我有一个模型用户,其中包含一些基本用户信息。我只是为我的应用程序添加了搜索功能,我想找到在其displayName属性中包含搜索词的用户?

用户模型

[
    {
        "_id" : ObjectId("5bbda46a433ced65ac7c4699"),
        "email" : "henoktes72@gmail.com",
        "displayName" : "Henok Tesfaye",
        "userId" : "5bbda46a433ced65ac7c4698",
        "reputationNumber" : 0,
        "questions" : [ 
            "5bbf135d7883513e3839a34c"
        ],
        "answers" : []
    },
    {
        "_id" : ObjectId("5bbdb84a7da23035740bf056"),
        "email" : "mezi@gmail.com",
        "displayName" : "Mezi Villager",
        "userId" : "5bbdb84a7da23035740bf055",
        "reputationNumber" : 5,
        "questions" : [ 
            "5bbf1f137883513e3839a34f"
        ],
        "answers" : [ 
            "5bbf6933e564763770d81828"
        ]
    }
]

如果搜索词为Henok,则输出必须为

[
    {
        "_id" : ObjectId("5bbda46a433ced65ac7c4699"),
        "email" : "henoktes72@gmail.com",
        "displayName" : "Henok Tesfaye",
        "userId" : "5bbda46a433ced65ac7c4698",
        "reputationNumber" : 0,
        "questions" : [ 
            "5bbf135d7883513e3839a34c"
        ],
        "answers" : []
    }
]

.find({ displayName: "Henok" })返回空记录。

2 个答案:

答案 0 :(得分:2)

您可以在filter条件的环回中使用where

  

在环回中使用正则表达式的两种方式。

Model.find({
    where: {'displayName': /video/i }, //i for case-insensitive.
}, function(err, resilus) {
  console.log(resilus);
});
  

OR

var search = new RegExp(search, 'i'); //i for case-insensitive.

Model.find({
    where: {'displayName': search },
}, function(err, resilus) {
  console.log(resilus);
});

答案 1 :(得分:1)

使用可以在.find(...)函数中使用正则表达式:

.find({displayName: /Henok/})