在mongodb和数组内的nodejs中进行不区分大小写的搜索

时间:2017-01-03 16:31:08

标签: node.js mongodb case-insensitive

我想执行一个标记搜索,它必须对标记关键字不区分大小写。我需要这个用于单个关键字搜索以及如何为多个关键字执行此操作。但问题是,当我搜索以下查询时,我什么都没得到。我是NodeJs和MongoDb的新手,所以如果查询中有任何错误,请纠正我。

标签可以是'tag1'或'TAG1'或'taG1'。

我使用的单标记关键字搜索(我没有得到任何结果):

db.somecollection.find({'Tags':{'TagText': new RegExp('Tag5',"i")}, 'Status':'active'})

用于多个标记关键字搜索(也需要使这种情况不敏感:()

db.somecollection.find({'Tags':{'TagText': {"$in": ['Tag3','Tag5', 'Tag16']}}, 'Status':'active'})

db中的记录集:

{
    "results": {
        "products": [
            {
                "_id": "5858cc242dadb72409000029",
                "Permalink": "some-permalink-1",
                "Tags": [
                        {"TagText":"Tag1"},
                        {"TagText":"Tag2"},
                        {"TagText":"Tag3"},
                        {"TagText":"Tag4"},
                        {"TagText":"Tag5"}
                    ],
                "Viewcount": 3791
            },
            {
                "_id": "58523cc212dadb72409000029",
                "Permalink": "some-permalink-2",
                "Tags": [
                        {"TagText":"Tag8"},
                        {"TagText":"Tag2"},
                        {"TagText":"Tag1"},
                        {"TagText":"Tag7"},
                        {"TagText":"Tag2"}
                    ],
                "Viewcount": 1003
            },
            {
                "_id": "5858cc242dadb11839084523",
                "Permalink": "some-permalink-3",
                "Tags": [
                        {"TagText":"Tag11"},
                        {"TagText":"Tag3"},
                        {"TagText":"Tag1"},
                        {"TagText":"Tag6"},
                        {"TagText":"Tag18"}
                    ],
                "Viewcount": 2608
            },
            {
                "_id": "5850cc242dadb11009000029",
                "Permalink": "some-permalink-4",
                "Tags": [
                        {"TagText":"Tag14"},
                        {"TagText":"Tag12"},
                        {"TagText":"Tag4"},
                        {"TagText":"Tag5"},
                        {"TagText":"Tag7"}
                    ],
                "Viewcount": 6202
            },

        ],
        "count": 4
    }
}

1 个答案:

答案 0 :(得分:0)

为要搜索的字段创建文本索引。 (默认不区分大小写)

db.somecollection.createIndex( { "Tags.TagText": "text" } )

有关更多选项,https://docs.mongodb.com/v3.2/core/index-text/#index-feature-text

将$ text运算符与$ search结合使用以搜索内容。

有关更多选项,https://docs.mongodb.com/v3.2/reference/operator/query/text/#op._S_text

使用单个词搜索

db.somecollection.find({$text: { $search: "Tag3"}});

使用多个搜索字词进行搜索

db.somecollection.find({$text: { $search: "Tag3 Tag5 Tag16"}});

更新

看起来您正在寻找可以通过正则表达式轻松实现的不区分大小写的相等性。您不需要文字搜索。删除文本搜索索引。

使用单个词搜索

db.somecollection.find({'Tags.TagText': {$regex: /^Tag3$/i}}).pretty();

使用多个搜索字词进行搜索

db.somecollection.find({'Tags.TagText': {$in: [/^Tag11$/i, /^Tag6$/i]}}).pretty();