Mongo 聚合 $slice 到对象而不是数组
Mongo aggregate $slice to object instead of array
我已将 Mongo 升级到 3.2,很高兴使用 $slice 进行聚合。但是,我的问题是我想将值分配给对象而不是数组。我找不到如何执行此操作。
我应用的脚本:
db.std_sourceBusinessData.aggregate(
{ $match : {objectType: "Account Balances"}},
{ $project: {_id: 1,entity_id: 1,accountBalances: 1}},
{ $unwind: "$accountBalances" },
{ $match: {"accountBalances": "Sales"}},
{$project: {
_id :1,
"Value" : {$slice: ["$accountBalances",1,1]},
"key" : {$literal: "sales"},
"company": "$entity_id"
}}
)
返回:
{
"_id" : ObjectId("566f3da3d58419e8b0fc76c7"),
"Value" : [
"5428.64"
],
"key" : "sales"
}
请注意,Value 是一个数组。我想要的是:
{
"_id" : ObjectId("566f3da3d58419e8b0fc76c7"),
"Value" : "5428.64",
"key" : "sales"
}
谢谢,马特
您可以使用$arrayElemAt
代替$slice
直接获取单个数组元素。
将您的最终 $project
阶段修改为:
{$project: {
_id: 1,
"Value": {$arrayElemAt: ["$accountBalances", 1]},
"key": {$literal: "sales"},
"company": "$entity_id"
}}
我已将 Mongo 升级到 3.2,很高兴使用 $slice 进行聚合。但是,我的问题是我想将值分配给对象而不是数组。我找不到如何执行此操作。
我应用的脚本:
db.std_sourceBusinessData.aggregate(
{ $match : {objectType: "Account Balances"}},
{ $project: {_id: 1,entity_id: 1,accountBalances: 1}},
{ $unwind: "$accountBalances" },
{ $match: {"accountBalances": "Sales"}},
{$project: {
_id :1,
"Value" : {$slice: ["$accountBalances",1,1]},
"key" : {$literal: "sales"},
"company": "$entity_id"
}}
)
返回:
{
"_id" : ObjectId("566f3da3d58419e8b0fc76c7"),
"Value" : [
"5428.64"
],
"key" : "sales"
}
请注意,Value 是一个数组。我想要的是:
{
"_id" : ObjectId("566f3da3d58419e8b0fc76c7"),
"Value" : "5428.64",
"key" : "sales"
}
谢谢,马特
您可以使用$arrayElemAt
代替$slice
直接获取单个数组元素。
将您的最终 $project
阶段修改为:
{$project: {
_id: 1,
"Value": {$arrayElemAt: ["$accountBalances", 1]},
"key": {$literal: "sales"},
"company": "$entity_id"
}}