如何在不同深度中搜索 MongoDB 嵌套子文档
How to Search MongoDB Nested Subdocuments Within Different Deeps
我在 MongoDB 中有一些子文档,偶尔包含不同类型 - 字符串、另一个子文档、另一个嵌套子文档等。
我正在尝试构建一个将在此子文档内容中搜索的查询,无论其类型如何。
给出以下文档:
{ name: "test1", content: "test contents"}
{ name: "test2", content: {family: "tests family content", last: "another test content"} }
{ name: "test3", content: {subdocument: {family: "super family contents", last: "last test content"} } }
我想使用一个查询来搜索所有文档和子文档中的所有字符串。
已经尝试过以下查询,但它 returns 只有最嵌套的子文档级别 - content.subdocument.family
:
{ $or: [
{"content": {'$regex': '.*conten.*', '$options': 'i'}},
{"content.family": {'$regex': '.*conten.*', '$options': 'i'}},
{"content.last": {'$regex': '.*conten.*', '$options': 'i'}},
{"content.subdocument.family": {'$regex': '.*conten.*', '$options': 'i'}},
{"content.subdocument.last": {'$regex': '.*conten.*', '$options': 'i'}}
]}
是否可以创建一个查询来一次遍历所有嵌套的 strings\deeps?
$regex
中缺少 $or
的语法。您应该像下面这样使用 $or:
db.collection.find({
$or: [{
"content": {
'$regex': '.*conten.*',
'$options': 'i'
}
}, {
"content.family": {
'$regex': '.*conten.*',
'$options': 'i'
}
}, {
"content.last": {
'$regex': '.*conten.*',
'$options': 'i'
}
}, {
"content.subdocument.family": {
'$regex': '.*conten.*',
'$options': 'i'
}
}, {
"content.subdocument.last": {
'$regex': '.*conten.*',
'$options': 'i'
}
}]
})
编辑:
以上查询给出以下结果:
[{
"_id": ObjectId("55f41b6aef4766c946112a2d"),
"name": "test1",
"content": "test contents"
}, {
"_id": ObjectId("55f41b6aef4766c946112a2e"),
"name": "test2",
"content": {
"family": "tests family content",
"last": "another test content"
}
}, {
"_id": ObjectId("55f41b6aef4766c946112a2f"),
"name": "test3",
"content": {
"subdocument": {
"family": "super family contents",
"last": "last test content"
}
}
}]
我在 MongoDB 中有一些子文档,偶尔包含不同类型 - 字符串、另一个子文档、另一个嵌套子文档等。 我正在尝试构建一个将在此子文档内容中搜索的查询,无论其类型如何。
给出以下文档:
{ name: "test1", content: "test contents"}
{ name: "test2", content: {family: "tests family content", last: "another test content"} }
{ name: "test3", content: {subdocument: {family: "super family contents", last: "last test content"} } }
我想使用一个查询来搜索所有文档和子文档中的所有字符串。
已经尝试过以下查询,但它 returns 只有最嵌套的子文档级别 - content.subdocument.family
:
{ $or: [
{"content": {'$regex': '.*conten.*', '$options': 'i'}},
{"content.family": {'$regex': '.*conten.*', '$options': 'i'}},
{"content.last": {'$regex': '.*conten.*', '$options': 'i'}},
{"content.subdocument.family": {'$regex': '.*conten.*', '$options': 'i'}},
{"content.subdocument.last": {'$regex': '.*conten.*', '$options': 'i'}}
]}
是否可以创建一个查询来一次遍历所有嵌套的 strings\deeps?
$regex
中缺少 $or
的语法。您应该像下面这样使用 $or:
db.collection.find({
$or: [{
"content": {
'$regex': '.*conten.*',
'$options': 'i'
}
}, {
"content.family": {
'$regex': '.*conten.*',
'$options': 'i'
}
}, {
"content.last": {
'$regex': '.*conten.*',
'$options': 'i'
}
}, {
"content.subdocument.family": {
'$regex': '.*conten.*',
'$options': 'i'
}
}, {
"content.subdocument.last": {
'$regex': '.*conten.*',
'$options': 'i'
}
}]
})
编辑:
以上查询给出以下结果:
[{
"_id": ObjectId("55f41b6aef4766c946112a2d"),
"name": "test1",
"content": "test contents"
}, {
"_id": ObjectId("55f41b6aef4766c946112a2e"),
"name": "test2",
"content": {
"family": "tests family content",
"last": "another test content"
}
}, {
"_id": ObjectId("55f41b6aef4766c946112a2f"),
"name": "test3",
"content": {
"subdocument": {
"family": "super family contents",
"last": "last test content"
}
}
}]