Node.js 如何在MongoDB中通过各种标准高效地查找文档?
我有一本书,里面的文件像Node.js 如何在MongoDB中通过各种标准高效地查找文档?,node.js,mongodb,mongodb-query,Node.js,Mongodb,Mongodb Query,我有一本书,里面的文件像 { "title": "The book", "author": "Joe Bob", "tags": ["dogs", "funny", "race"], "categories": ["fiction", "adventure"
{
"title": "The book",
"author": "Joe Bob",
"tags": ["dogs", "funny", "race"],
"categories": ["fiction", "adventure"]
}
我想使用一个搜索栏来查找符合这些条件的书籍。我已经记下了大部分内容,但我现在不明白我应该使用的是搜索还是聚合。我还希望所有内容都不区分大小写,但我不知道如何使用$in
运算符执行类似于$options:'I'
$or : [
{'title': {$regex: search, $options: 'i'}},
{'author': {$regex: search, $options: 'i'}},
{'tags': {$in: [search]}},
{'categories': {$in: [search]}},
]
这是我搜索100多个这样的文档的最佳方式吗?或者我应该更喜欢聚合。正如您所指出的,您已经基本解决了这个问题,除了那些数组的不区分大小写的情况之外,我稍后将讨论这些数组 首先,我建议您继续搜索所有字段。然而,如果您想坚持您的方法,这也是完全有效的,下面是我将如何更改您的查询 由于数组的匹配方式与字符串的匹配方式相同,因此根本不需要使用
$in
运算符。因此,使那些类别
和标记
搜索不区分大小写是一件小事。假设我们正在寻找“Mark”,那么在类别中任何与“marketing”有关的内容都应该被挑选出来。以下是如何:
db.collection.find({
$or: [
{
"title": {
$regex: "Mark",
$options: "i"
}
},
{
"author": {
$regex: "Mark",
$options: "i"
}
},
{
"tags": {
$regex: "Mark",
$options: "i"
}
},
{
"categories": {
$regex: "Mark",
$options: "i"
}
},
]
})
这里有一个例子供您测试。正如您所指出的,您已经基本解决了这个问题,除了那些数组的不敏感情况,我将在稍后讨论
首先,我建议您继续搜索所有字段。然而,如果您想坚持您的方法,这也是完全有效的,下面是我将如何更改您的查询
由于数组的匹配方式与字符串的匹配方式相同,因此根本不需要使用$in
运算符。因此,使那些类别
和标记
搜索不区分大小写是一件小事。假设我们正在寻找“Mark”,那么在类别中任何与“marketing”有关的内容都应该被挑选出来。以下是如何:
db.collection.find({
$or: [
{
"title": {
$regex: "Mark",
$options: "i"
}
},
{
"author": {
$regex: "Mark",
$options: "i"
}
},
{
"tags": {
$regex: "Mark",
$options: "i"
}
},
{
"categories": {
$regex: "Mark",
$options: "i"
}
},
]
})
这是一个供您测试的示例。查看-因为您正在搜索所有字段。您可以使用:{'tags':{$elemMatch:{$regex:search,$options:'i'}}
通过regext在数组中搜索查看-因为您正在搜索所有字段。您可以使用:{'tags':{$elemMatch:{$regex:search,$options:'i'}
按regex在数组中搜索