node.js - Mongoose:用投影填充对象的嵌套数组

标签 node.js mongodb mongoose mongoose-populate

var CarSchema = new Schema({
    name: {type: String},
    partIds: [{type: Schema.Types.ObjectId, ref: 'Part'}],
});

var PartSchema = new Schema({
    name: {type: String},
    props: [
        { colour: {type: String}, shape: {type:String} }
    ],
});

例如

Car = {
       name: "BMW",
       partIds:[ObjectId("57baa43e152654f80aac36a6")]}

Part = {
        _id: ObjectId("57baa43e152654f80aac36a6"),
        name: "Piston",
        props: [{colour:"red", shape: "Cubical"},{colour:"green", shape: "cylindrical"}]

所以当我查询时我应该得到这样的文档:

Car = {
      name: "BMW",
      partIds: [{ 
_id:ObjectId("57baa43e152654f80aac36a6"), name:"Piston", props: [{colour:"red", shape:"cubical"}]
     }

props 数组只能包含红色元素

我想用零件数组填充汽车,使其 Prop 数组仅包含红色的对象。无论如何,有没有办法做到这一点,或者我必须采用老式的方式并循环遍历将其颜色与红色相匹配的 Prop 数组。

最佳答案

您可以通过在populate中提供select选项来做到这一点调用:

Car.findOne()
    .populate({
        path: 'partIds',
        select: { props: { $elemMatch: { colour: 'red' } }, name: 1 }
    })
    .exec(callback);

结果:

{ _id: 57c085451cd8dfcdf814f640,
    name: 'BMW',
    partIds:
     [ { _id: 57baa43e152654f80aac36a6,
         name: 'Piston',
         props: [ { colour: 'red', shape: 'Cubical' } ] } ] }

select 使用$elemMatch投影运算符仅选择红色 props 元素。

关于node.js - Mongoose:用投影填充对象的嵌套数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39139134/

相关文章:

mongodb - Mongo Update $set 不工作

javascript - 异步 Mocha 测试中出现超时错误

node.js - Express 中的 session 无法正常工作

javascript - Angular JavaScript 中的异步调用

c# - C# MongoDB 2.0 中多个字段的项目

node.js - 在 Mongoose 中,我如何按日期排序? (node.js)

node.js - Mongoose populate() 返回填充文档的 '_id' 字段,值为 "new ObjectId()"

node.js - Axios 自签名证书错误,即使在提供证书时也是如此

node.js - 如何在 Mongoose 中查询嵌套数组

mongodb - 在 Mongodb 的 mongoexport 命令中获取断言错误。