猫鼬没有人口

时间:2018-03-19 10:35:11

标签: database mongodb mongoose mongoose-schema mongoose-populate

我有一个User架构和Product架构。用户可以向数据库添加许多产品。

每个产品都会跟踪将产品添加到数据库中的人员。

每个用户通过将productSchema嵌套到数组中来跟踪添加的项目

const productSchema = new Schema({
  //... 
  addedBy: {
    type: mongoose.Schema.Types.ObjectId,
    ref: "users"
  }
});

const userSchema = new Schema({   
  //...
  addedItems: [productSchema]
});

mongoose.model("products", productSchema);
mongoose.model("users", userSchema);

以下是我尝试填充User的addedItems的方法:

User.findOne({ _id: req.body.id })
    .populate({
        path: "addedItems",
        match: { addedBy: req.body.id },
        select: "_id"
    })

我正在尝试做什么

首先通过ID查找用户(没问题)。然后根据条件填充'addedItems'数组。如果'addedBy'包含SAME id作为当前用户,则将product._id填充到数组中。

问题:当我检查用户的addedItems时,数组总是显示为空。尽管如此,DB中有多个产品,其中'addedBy'具有匹配的ID。

我做错了什么?

1 个答案:

答案 0 :(得分:1)

我认为您的架构不是为执行该查询而设计的。 我的建议是:

const productSchema = new Schema({
    //... 
    addedBy: {
        type: mongoose.Schema.Types.ObjectId,
        ref: "User"
    }
});

const userSchema = new Schema({   
    //...
    addedItems: [{
        type: mongoose.Schema.Types.ObjectId,
        ref: 'Product'
    }]
});

mongoose.model("Product", productSchema);
mongoose.model("User", userSchema);

查询以填充用户添加的项目

User.findOne({ _id: req.body.id }).populate('addedItems');