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

Case insensitive search in mongodb and nodejs inside an array

我想执行标签搜索,该搜索必须对标签关键字区分大小写。我需要这个来进行单个关键字搜索,以及如何对多个关键字进行搜索。但问题是当我使用以下查询进行搜索时,我一无所获。我是 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'})

数据库中的记录集:

{
    "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
    }
}

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

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();