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