MongoDB:在其中一个字段中查找包含特定值的文档

时间:2014-03-29 00:06:26

标签: node.js mongodb mongodb-query

对标题抱歉...

我有一个像这样的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的文档。

这是否可以在不逐字段(学生,教师,主管)的情况下明确查询?

谢谢;)

2 个答案:

答案 0 :(得分:1)

查看TextIndex上的文档。如果创建TextIndex,则可以搜索多个属性。但是在创建索引时,您需要包含需要搜索的所有属性。您还可以为每个属性提供权重,以便Mongo可以对结果进行排序取决于哪个属性与值匹配。

编辑 - 根据尼尔的评论排除文本编辑。您是否可以尝试在每个属性上创建单个索引,然后使用包含所有属性的OR子句? OR将使用所有单个索引。性能取决于属性的数量。

答案 1 :(得分:1)

使用数组时,您受多键索引约束的约束。因此,您不可能创建一个具有多个"数组的compound index"元素的类型。因此,排除了可以在搜索中跨越多个字段的方法。比如文字搜索。

必须指定所有字段,但您可以使用$或条件执行此操作:

db.collection.find({ 
    "$or": [
        { "students": 5},
        { "teachers": 5 },
        { "supervisor": 5 }
    ]
})

当然,您可以查看确定"字段的方法"您需要以这种方式包含,或者使用mapReduce进行JavaScript扫描。