【问题标题】:MongoDB - advanced queryMongoDB - 高级查询
【发布时间】:2018-04-23 06:46:18
【问题描述】:

我想对我的 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
}, {...});

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

【问题讨论】:

    标签: mongodb mongoose mongodb-query


    【解决方案1】:

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

    Car.findOneAndUpdate({$or: myCars})
    

    仔细检查我的假设

    恕我直言,使用$or 通常是一个很好的指标,表明可以在其他地方进行一些重构,因此您也可以尝试从新的角度解决您的特定问题。特别是如果 myCars 数组很大或者您的数据集非常大。根据docs,如果两个字段都被索引,则“或查询”可以执行索引扫描。

    【讨论】: