如何根据本文档的子文档ID获取文档

时间:2014-04-25 08:34:31

标签: node.js mongodb mongoose

我有一个产品架构和一个类别架构。

var ProductSchema = new Schema({
    categories: [CategorySchema],
    createdDate: { type: Date, default: Date.now },
});

var CategorySchema = new Schema({
    name: String,
    createdDate: { type: Date, default: Date.now },
});

如何获取包含特定类别的产品。如何使用mongoose.js编写此查询?

1 个答案:

答案 0 :(得分:0)

假设您基于Product定义具有ProductSchema的模型定义,那么一般语法与标准mongoDB .find()查询没有太大区别:

var categoryId; // As whatever the desired value of the ObjectId is

Product.find({ "categories._id": categoryId }, function(err,product) {

  // Work with found document or err object here

});

因此,这只是查询的一个简单的“点符号”形式,以便引用子文档元素。

当然,您的架构结构似乎也基于embedded documents,这意味着您也应该能够访问该架构的任何其他属性:

Product.find({ "categories.name": "category name" }, function(err,product) {

  // Work with found document or err object here

});

对于在自己的模型集合中具有CategorySchema个对象的解决方案,还有.poulate()方法,它提供了一种有效的,如果不是非常有效的替代嵌入不可行的嵌入。 / p>