我如何从猫鼬模式的对象数组中选择一个特定的对象?

时间:2020-11-03 06:44:32

标签: express mongoose

    var mongoose = require("mongoose");
    
    // schema setup
    var productSchema = new mongoose.Schema({
        type:{
            type:String,
            required:[true,'a product must have a type']
        },
        sId:String,
        image:String,
        products:[{
            name:String,
            image:String,
            price:Number
        }]
    });
    
    module.exports = mongoose.model("Product",productSchema);

我已经像这样制作了我的猫鼬模式。现在,我只想使用猫鼬查询从名为“产品”的对象数组中访问特定对象。 谁能告诉我该怎么做?我会非常感激。

1 个答案:

答案 0 :(得分:0)

您需要这样的东西:

db.collection.find({
  "products.name": "name"
},
{
  "products.$": 1
})

通过该查询,您将找到name字段为'name'的产品对象。此外,使用位置运算符$仅返回匹配项。

蒙哥游乐场示例here

编辑:请注意,如果存在与数组对象匹配的多个文档,则此查询将返回多个子文档。要过滤唯一元素,您必须指定另一个唯一字段,如下所示:

db.collection.find({
  "sId": "1",
  "products.name": "name"
},
{
  "products.$": 1
})

编辑以说明如何使用find使用mongoose

您可以使用findfindOne,但查询本身将是相同的。

这很简单。您需要使用问题中描述的模型,因此代码如下:

var objectFound = await YourModel.findOne({
  "products.name": "name"
},
{
  "products.$": 1
})

其中YourModel是定义的架构。