对标题抱歉...
我有一个像这样的mongoDB集合:
{
students: [1, 2, 3],
teachers: [4, 5]
},
{
students: [5, 6, 7, 8, 9],
teachers: [10]
},
{
students: [11, 12, 14, 15, 16],
teachers: [17, 18]
supervisor: [5]
}
假设“1”,“2”,“......”表示某人是教师或学生或其他人。我想要做的是找到包含主题5的文档。
这是否可以在不逐字段(学生,教师,主管)的情况下明确查询?
谢谢;)
答案 0 :(得分:1)
查看TextIndex上的文档。如果创建TextIndex,则可以搜索多个属性。但是在创建索引时,您需要包含需要搜索的所有属性。您还可以为每个属性提供权重,以便Mongo可以对结果进行排序取决于哪个属性与值匹配。
编辑 - 根据尼尔的评论排除文本编辑。您是否可以尝试在每个属性上创建单个索引,然后使用包含所有属性的OR子句? OR将使用所有单个索引。性能取决于属性的数量。
答案 1 :(得分:1)
使用数组时,您受多键索引约束的约束。因此,您不可能创建一个具有多个"数组的compound index"元素的类型。因此,排除了可以在搜索中跨越多个字段的方法。比如文字搜索。
您必须指定所有字段,但您可以使用$或条件执行此操作:
db.collection.find({
"$or": [
{ "students": 5},
{ "teachers": 5 },
{ "supervisor": 5 }
]
})
当然,您可以查看确定"字段的方法"您需要以这种方式包含,或者使用mapReduce进行JavaScript扫描。