在非常大的mongodb表上自动完成

时间:2017-07-15 08:46:49

标签: node.js mongodb autocomplete

我一直在研究角度材质的自动完成功能,只要您将整个表格作为数组加载到控制器中,它就能很好地工作。

但如果该表有10,000条记录呢?你会怎么做?

我想在我的mongodb db.user表上搜索/自动完成,它看起来像这样:

{ 
    "_id" : "this@that.com", 
    "name" : "This Thatson", 
    "phone" : "343-345-2234" 
},
{ 
    "_id" : "foo@bar.com", 
    "name" : "Foo Barron", 
    "phone" : "111-222-3333" 
},
{ 
    "_id" : "stack@overflow.com", 
    "name" : "Stack Overflowson", 
    "phone" : "333-222-111" 
}

在我的角度页面中,我得到了一个字段:

<input type="text" ng-model="vm.searchText" ng-change="vm.search()">

然后在我的角度控制器中,我想在用户键入时自动搜索,例如3个字符,如foo - 角度控制器应该调用我的nodejs控制器并获得结果。

我的nodejs控制器接收foo然后接收什么.....?

我希望看一下_idnamephone,看看foo是否在其中任何一个。

db.users.find(....)

你会怎么做?

更新:感谢Neil出色的解决方案,搜索工作正常,但我在设置查询方面遇到了问题......

    if (received.user) {
        user  = { "_id":   { "$regex": "^" + received.user,  "$options": "i" } }
    }
    if (received.name) {
        name  = { "_id":   { "$regex": "^" + received.name,  "$options": "i" } }
    }
    if (received.phone) {
        phone  = { "_id":   { "$regex": "^" + received.phone,  "$options": "i" } }
    }


    usersTable.aggregate([
    {
        $match: {
            "$or": [
                user,
                name,
                phone
            ] 
        }
    }, etc...

0 个答案:

没有答案