我使用mongodb进行了一些过滤,但它返回了我的数组中的所有数据。但我只想从该数组中获取特定元素。我无法在文件中找到它。
db.sales.aggregate([
{
$project: {
items: {
$filter: {
input: "$items",
as: "item",
cond: { $gte: [ "$$item.price", 100 ] }
}
}
}
}
])
运行以上命令我将这是结果
{
"_id" : 0,
"items" : [
{ "item_id" : 2, "quantity" : 1, "price" : 240 }
]
}
问题是我只想得到价格
{
"_id" : 0,
"items" : [
{ "price" : 240 }
]
}
甚至
{
"price" : 240
}
怎么做?
答案 0 :(得分:0)
如果您的数据看起来像这样,我不知道您的整个数据是什么
{
"_id" : 0,
"items" : [
{
"item_id" : 1,
"quantity" : 5,
"price" : 80
},
{
"item_id" : 2,
"quantity" : 1,
"price" : 240
},
{
"item_id" : 3,
"quantity" : 4,
"price" : 320
}
]
}
试试这个
> db.sales.aggregate([
{'$unwind': '$items'},
{'$project': {'price': '$items.price'}},
{'$match' : {'price': {'$gte': 100 }}}
])
{ "_id" : 0, "price" : 240 }
{ "_id" : 0, "price" : 320 }
{'items': [{'item_id': 1}, {'item_id': 2}]}
在$unwind
之后
{'items': {'item_id': 1}}
{'items': {'item_id': 2}}
这可以选择您想要的字段(或者只删除您不想要的字段),并将字段重命名为您想要的字段。
{'items': {'item_id': 1}}
在$project
之后
{'renamefor__item_id': 1}
请参阅上一个链接了解更多详情。我的英语不是很好:(
答案 1 :(得分:0)
你实际上需要$map
来改变"返回的数组元素,仅$filter
"选择" "匹配"的数组元素。尝试运行以下代码。
ds.sales.aggregate([
{
$project: {
items: {
$map: {
input: {
$filter: {
input: "$items",
as: "item",
cond: { $gte: [ "$$item.price", 100 ] }
}
},
"as": "a",
"in": {
"price": "$$a.price"
}
}
}
}
}], function (err, list) {
...