在子数组猫鼬中找到只有匹配对象的对象数组?
Posted
技术标签:
【中文标题】在子数组猫鼬中找到只有匹配对象的对象数组?【英文标题】:find array of objects with only matched object in subarray mongoose? 【发布时间】:2022-01-16 12:51:08 【问题描述】:我正在尝试获取具有匹配 id 的对象数组,并且仅包含具有匹配属性 size 和 model 的子数组 product_price 对象?
product_name:
type: String,
required: true,
,
service_hourly_price:
type: Number,
required: true
,
product_price: [
model:
type: String,
enum:['Euro','Japanese']
,
size:
type: String,
enum: ['S','M','L','XL']
,
price:
type: Number,
required: true,
],
尝试这样查询:
ProductSchema.aggregate( [
$match: _id:
$in: _id.map(function(_id) return new mongoose.Types.ObjectId(_id) )
,
$match : product_price : model : 'Euro' , size: 'S'
])
我怎样才能达到这样的结果:
products:
_id: new ObjectId("61b3ab3ceba5bc724d754929"),
product_name: 'Basic Service',
service_hourly_price: 25,
product_price: [
_id: new ObjectId("61b3ab3ceba5bc724d75492a"),
size: 'S',
model: 'Euro',
price: 100
]
,
_id: new ObjectId("61b3aa88eba5bc724d7548fb"),
product_name: 'Horn',
service_hourly_price: 5,
product_price: [
_id: new ObjectId("61b3aa88eba5bc724d7548fc"),
size: 'S',
model: 'Euro',
price: 110
]
product_price 中必须只包含一个匹配对象。
【问题讨论】:
能否提供一个示例数据库文档 您的 product_price 是否有理由成为一个数组?你只有一个对象吗? 【参考方案1】:我不确定为什么你的 product_prize 是一个只有一个对象的数组,你可以删除那里的数组,从而删除聚合中的 $unwind ,但现在这对你有用:
ProductSchema.aggregate( [
$match:
_id:
$in: _id.map(function(_id) return new mongoose.Types.ObjectId(_id) )
,
'$unwind':
'path': '$product_price'
,
'$match':
'product_price.model': 'Euro',
'product_price.size': 'S'
])
Here try it out
这里是 mongo Compass 的证明:
【讨论】:
是的。在结果数组中,我们只有一个对象。去掉数组就ok了 谢谢。它对我有用以上是关于在子数组猫鼬中找到只有匹配对象的对象数组?的主要内容,如果未能解决你的问题,请参考以下文章