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);
我已经像这样制作了我的猫鼬模式。现在,我只想使用猫鼬查询从名为“产品”的对象数组中访问特定对象。 谁能告诉我该怎么做?我会非常感激。
答案 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
。
您可以使用find
或findOne
,但查询本身将是相同的。
这很简单。您需要使用问题中描述的模型,因此代码如下:
var objectFound = await YourModel.findOne({
"products.name": "name"
},
{
"products.$": 1
})
其中YourModel
是定义的架构。