mongodb - 使用 mongodb 文档的其他字段显示数组的条件大小
问题描述
我有一个集合,fridges
我希望每个冰箱的一些字段匹配一个条件加上这个冰箱中物品的“条件大小”。
这是我的数据库的一个例子:
db={
"fridges": [
{
_id: 1,
items: [
{
itemId: 1,
name:"beer"
},
{
itemId: 2,
name: "chicken"
}
],
brand:"Bosch",
size:195,
cooler:true,
color:"grey"
},
{
_id: 2,
items: [
{
itemId: 1,
name:"beer"
},
{
itemId: 2,
name: "chicken"
},
{
itemId: 3,
name: "lettuce"
}
],
brand:"Electrolux",
size:200,
cooler:true,
color:"white"
},
]
}
我想得到fridges
这些相互条件('和'条件):
brand
是$in ["Bosch","Samsung"]
color
是$in ["grey","white"]
另外:有名字的项目数$in ["beer","lettuce"]
最后:删除一些字段,如结果的size
和items
。
在我们的示例中,例外输出将是:
{
_id:1
itemsNumber:1,
brand:"Bosch",
cooler:true,
color:"grey"
}
说明:我们删除了字段items
and size
,从数组itemsNumber
中计算啤酒和生菜的数量。items
我们只保留第一台冰箱,它的品牌是博世,它是灰色的。
这是我到目前为止所拥有的:
db.fridges.aggregate([
{
"$match": {
$and: [
{
"brand": {
$in: [
"Bosch",
"Samsung"
]
}
},
{
"color": {
$in: [
"grey",
"white"
]
}
}
]
}
},
{
"$project": {
"itemsNumber": {
$size: "$items" // This is not good
},
brand: 1,
cooler: 1,
color: 1
}
}
])
哪个返回我:
[
{
"_id": 1,
"brand": "Bosch",
"color": "grey",
"cooler": true,
"itemsNumber": 2
}
]
beer
计算与or匹配的项目lettuce
是我的主要问题。
这是一个可执行的例子。
提前致谢 !
解决方案
我发现了如何使它工作。感谢@joe 建议使用过滤器,这确实是解决方案。
这是完整的查询:
db.fridges.aggregate([
{
$match: {
$and: [
{
"brand": {
$in: [
"Bosch",
"Samsung"
]
}
},
{
"color": {
$in: [
"grey",
"white"
]
}
}
]
}
},
{
$project: {
"itemsNumber": {
"$filter": {
"input": "$items",
"as": "item",
"cond": {
$in: [
"$$item.name",
[
"beer",
"lettuce"
]
]
}
}
},
brand: 1,
cooler: 1,
color: 1
}
}
])
推荐阅读
- javascript - 如何创建循环变量以在 axios 调用中使用?
- html - 使用 Selenium 查看元素来源列表?
- ruby-on-rails - ruby on rails 中的 NoMethodError simple_form_for
- excel - 在 Excel VBA 中复制 (Ctrl-C) 形状会继承旧的位置值
- javascript - 用 C# 加密。需要在 NodeJS 中解密
- c# - WPF 使用 ClosedXML 将 DataGrid 导出到 Excel 文件
- macos-sierra - 我的mac book上的java-6安装问题
- javascript - 我可以将传单插件 *.js 和 *.css 放在一起吗?
- python - 截取测试断言错误/异常的屏幕截图
- sql-server - SSIS 表达式中的 case 或 if 语句