我应该怎么做一个聚合?
问题描述:
我有一个内部包含产品(对象)的数组。它看起来像:我应该怎么做一个聚合?
[
{_id: 123, name:'first', category:'Vape', property:[
{key:'brand', values:'Eleaf'},
{key:'mechmode', values:'some'},
{key:'color', values:['red', 'blue']},
{key:'batrtype', values:'some2'},
]},
{_id: 1234, name:'second', category:'Vape1', property:[
{key:'brand', values:'Eleaf1'},
{key:'mechmode', values:'some'},
{key:'color', values:['black']},
{key:'batrtype', values:'some2'}
]},
{_id: 12345, name:'third', category:'Vape3', property:[
{key:'brand', values:'Eleaf3'},
{key:'mechmode', values:'some'},
{key:'color', values:['green', 'yellow']},
{key:'batrtype', values:'some2'}
]},
{_id: 123456, name:'fourth', category:'Vape', property:[
{key:'brand', values:'Eleaf'},
{key:'mechmode', values:'some'},
{key:'color', values:['red', 'green']},
{key:'batrtype', values:'some2'}
]}
]
从客户
{category:'Vape', body:{brand:'Eleaf', color:'red'}}
请求我应该怎么做蒙戈合计获得具有品牌=“Eleaf” 和颜色的产品=红色根据要求?
有人可以帮忙吗?
答
我想这应该做的伎俩:
db.products.find({
category: "Vape",
$and: [
{ property: { $elemMatch: { key: "brand", value: "Eleaf1" },
{ property: { $elemMatch: { key: "color", value: "red" }
]})
我不知道你的数据的结构是最好的做法。如果它们被称为“品牌”的字段的值为“颜色”而不是键/值对,则可能会更容易一些。
该数组是作为单个字段存储在文档中的,还是集合中的文档列表? – Joe
它是集合中的文档列表 –