MongoDB - 高级查询

时间:2018-04-22 18:47:55

标签: mongodb mongoose mongodb-query

我想对我的MongoDB执行查询,以查找与_id之一myCars匹配的汽车文档。假设我想对该文档执行一些更新,我想在一个查询中执行此操作。但我真的想确保汽车文件在执行更新之前也与我的汽车color匹配。有没有办法在单个查询中执行此操作?

const myCars = [
    { _id: "abc", color: "Red" },
    { _id: "def", color: "Blue" },
];

Car.findOneAndUpdate({
    _id: {
        $in: myCars.map(car => car._id),
    },
    color: myCars -->[?]<--.color,   // the car that matched the $in operator
}, {...});

我不确定这个问题的关键字是什么,但是当我清楚一点时,我会确保更新标题!

1 个答案:

答案 0 :(得分:0)

您可以尝试[$or][1]查询,该查询将使用与myCars数组中的每个汽车匹配的表达式列表。假设myCars是仅包含_idcolor字段的对象数组:

Car.findOneAndUpdate({$or: myCars})

通过

仔细检查我的假设 使用$or的Imho通常是一个很好的指标,可以在其他地方进行一些重构,因此您也可能尝试从新的角度处理您的特定问题。特别是如果myCars数组很大或者您的数据集非常大。根据{{​​3}},如果两个字段都被编入索引,则“或查询”可以执行索引扫描。