我這裏有兩個集合:Mongo聚合管道:如何在後續階段訪問一個組階段變量?
> db.Unit.find({}).limit(1).pretty()
{
"_id" : ObjectId("58b6878de1648d05903e1beb"),
"number" : "07in15in4",
"owner" : {
"name" : "vacant"
},
"floor" : 15,
"tower" : 4,
"VisitorLogs" : [
ObjectId("58b6878ee1648d05903e1d22"),
ObjectId("58b6878ee1648d05903e236e"),
ObjectId("58b6878ee1648d05903e23c9"),
ObjectId("58b6878ee1648d05903e2454"),
ObjectId("58b6878ee1648d05903e2915"),
ObjectId("58b6878ee1648d05903e2aae"),
ObjectId("58b6878ee1648d05903e2b93")
]
}
和
> db.VisitorLog.find({}).limit(1).pretty()
{ "_id" : ObjectId("58b6878fe1648d05903e2efa"), "purpose" : "WorkHere" }
VisitorLogs單元收集在指到第二集中,即VisitorLog。
我需要爲每個目的找到具有最大訪問次數的單位。
我想這蒙戈外殼:
units=db.Unit
units.aggregate([
{$match:{'VisitorLogs':{$gt:[]}}},
{$unwind:'$VisitorLogs'},
{$lookup:{
from:"VisitorLog",
localField:"VisitorLogs",
foreignField:"_id",
as:"log"}
},
{$group:{_id:{number:"$number", purpose:"$log.purpose"}, count:{$sum:1}}},
{$sort:{count:-1}},
{$group:{_id:"$_id.purpose", unit:{$first:"$_id.number"}}},
{$limit:10}
])
我得到以下結果:
{ "_id" : [ "Business" ], "unit" : "05in12in2" }
{ "_id" : [ "WorkHere" ], "unit" : "09in04in2" }
{ "_id" : [ "Casual" ], "unit" : "10in05in2" }
{ "_id" : [ "JobInterview" ], "unit" : "05in14in2" }
這意味着,例如,05in12in2了其有最大的訪問單元號目的「業務」
我現在想要得到號碼的「業務ss「訪問05in12in2了。 我認爲它在第一階段的「count」變量中。
我該如何訪問?我在第二階段最後試{$group:{_id:"$_id.purpose", unit:{$first:"$_id.number"}, visits:"$count"}},
,即只是極限階段之前,但我得到的錯誤:
> units.aggregate([
... {$match:{'VisitorLogs':{$gt:[]}}},
... {$unwind:'$VisitorLogs'},
... {$lookup:{from:"VisitorLog", localField:"VisitorLogs", foreignField:"_id", as:"log"}},
... {$group:{_id:{number:"$number", purpose:"$log.purpose"}, count:{$sum:1}}},
... {$sort:{count:-1}},
... {$group:{_id:"$_id.purpose", unit:{$first:"$_id.number"}, visits:"$count"}},
... {$limit:10}
... ])
assert: command failed: {
"ok" : 0,
"errmsg" : "the group aggregate field 'visits' must be defined as an expression inside an object",
"code" : 15951
} : aggregate failed
[email protected]/mongo/shell/utils.js:25:13
[email protected]/mongo/shell/assert.js:13:14
[email protected]/mongo/shell/assert.js:287:5
[email protected]/mongo/shell/collection.js:1312:5
@(shell):1:1
有人可以幫我嗎?
我不知道的邏輯,但您有權訪問計數變量用表達式來使用變量。例如'{$ group:{_ id:「$ _ id.purpose」,單位:{$ first:「$ _ id.number」},訪問次數:{$ first:「$ count」}}}' {$ group:{_ id:「$ _ id.purpose」,單位:{$ first:「$ _ id.number」},訪問次數:{$ sum:「$ count」}}}' – Veeram