【发布时间】:2019-03-04 08:50:46
【问题描述】:
我有文件,比如这个:
{
"_id" : ObjectId("5c763335eabaf70627249465"),
"permissions" : [
"adminCompany"
],
"city" : "890",
"companyName" : "qwe",
"country" : "890",
"county" : "890",
"email" : "varadi83gabor@gmail.com",
"headquarters" : null,
"modifyed" : null,
"name" : "qwe",
"nickname" : null,
"password" : "202cb962ac59075b964b07152d234b70",
"postalCode" : "890",
"registered" : ISODate("2019-02-27T06:50:29.035Z"),
"shops" : [
{
"_id" : ObjectId("5c797074b2e01c38ac55b796"),
"city" : "Nagymaros",
"country" : "Hungary",
"county" : "Pesyt",
"currency" : "HUF",
"district" : null,
"language" : null,
"name" : "Piknik",
"phone" : "123123123",
"places" : [
{
"_id" : ObjectId("5c79714fb2e01c2ee3196a63"),
"name" : "terasz",
"products" : [
{
"_id" : ObjectId("5c797162b2e01c2ee3196a65"),
"active" : true,
"added" : null,
"description" : "borocska baszod",
"modified" : null,
"name" : "bor",
"taxPercentage" : 27,
"unit" : "liter",
"unitPrice" : 1500
}
],
"qrcodes" : [
{
"_id" : ObjectId("5c79715cb2e01c2ee3196a64"),
"name" : "asztal1"
}
]
},
{
"_id" : ObjectId("5c79718cb2e01c52afb050f9"),
"name" : "emelet",
"products" : [
{
"_id" : ObjectId("5c79719db2e01c52afb050fb"),
"active" : true,
"added" : null,
"description" : "sorocske baszod",
"modified" : null,
"name" : "sor",
"taxPercentage" : 27,
"unit" : "korso",
"unitPrice" : 500
},
{
"_id" : ObjectId("5c7971deb2e01c52afb050fd"),
"active" : true,
"added" : null,
"description" : "szaros viz",
"modified" : null,
"name" : "teodora",
"taxPercentage" : 27,
"unit" : "liter",
"unitPrice" : 1000
}
],
"qrcodes" : [
{
"_id" : ObjectId("5c797195b2e01c52afb050fa"),
"name" : "qr1"
}
]
},
{
"_id" : ObjectId("5c7a20ef2fa7fa847633bb39"),
"name" : "Addf",
"products" : [],
"qrcodes" : [
{
"_id" : ObjectId("5c7a20f92fa7fa847633bb3a"),
"name" : "Kisfaszom"
}
]
}
],
"postalCode" : "123",
"region" : "Közép-Magyarország",
"staffs" : [
{
"permissions" : [
"staffServing"
],
"_id" : ObjectId("5c7a6248b2e01c744f8b67b5"),
"email" : "varadi83gabor@gmail.com",
"modifyed" : null,
"name" : "12e12e",
"nickname" : "qweqwe",
"password" : "202cb962ac59075b964b07152d234b70",
"registered" : ISODate("2019-03-02T11:00:25.956Z"),
"status" : "active"
},
{
"permissions" : [
"staffFront",
"staffCourier",
"staffManager",
"staffServing"
],
"_id" : ObjectId("5c7a629fb2e01c744f8b67b7"),
"email" : "varadi83gabor@gmail.com",
"modifyed" : null,
"name" : "Kis Ferenc",
"nickname" : "123123",
"password" : "202cb962ac59075b964b07152d234b70",
"registered" : ISODate("2019-03-02T11:01:52.235Z"),
"status" : "active"
}
],
"status" : "active",
"street" : "qewqweqwe",
"streetNumber" : 123123
},
{
"_id" : ObjectId("5c7aa611b2e01c5565f70aff"),
"city" : "Budapest",
"country" : "Hungary",
"county" : "pest",
"currency" : "HUF",
"district" : "VI. kerület",
"language" : null,
"name" : "Kiado kocsma",
"phone" : "123123",
"places" : [],
"postalCode" : "1066",
"region" : "Közép-Magyarország",
"staffs" : [],
"status" : "active",
"street" : "Jokai",
"streetNumber" : 19
}
],
"status" : "inactive",
"street" : "890",
"streetNumber" : "890",
"taxNumber" : "890",
"__v" : 0
}
我必须通过 _id 从 company.shops.staffs 数组中找到一名员工,并且我还想将公司中所有可用的商店包含到输出文档中。
这是我尝试的聚合:
this.companyManager.aggregate([
{"$match": {"shops.staffs._id": body.staffId}},
{"$unwind": "$shops"},
{"$unwind": "$shops.staffs"},
{"$match": {"shops.staffs._id": body.staffId}},
{"$project": {_id: "$shops.staffs._id", shops: "$shops", staff: "$staffs"}},
], function(error, result:Null<Array<Dynamic>>) {
trace(error);
trace(result);
if (result.length == 0) {
callback({status: Status.ERROR, data: result, error: "not found staff"});
} else {
callback({status: (error == null) ? Status.SUCCESS : Status.ERROR, data: result[0].staff, error: error});
}
});
但这只是包括工作人员所在的商店。
如何生成像这样的输出文档?:
{"staff":<staffData>,"shops":[shopsArray]}
//////已编辑////// 所以我需要从 shop.staff 数组中找到一个员工,并从 company.shops 数组中找到所有商店,并将其放入文档中,如下所示:
{
"staff": {
"permissions": [
"staffServing"
],
"_id": ObjectId("5c7a6248b2e01c744f8b67b5"),
"email": "varadi83gabor@gmail.com",
"modifyed": null,
"name": "12e12e",
"nickname": "qweqwe",
"password": "202cb962ac59075b964b07152d234b70",
"registered": ISODate("2019-03-02T11:00:25.956Z"),
"status": "active"
},
"shops": [<SHOPS DOCUMENTS>]
}
我希望现在已经清楚了,谢谢!
【问题讨论】:
-
真的不太清楚你想在这里做什么。您是否可能试图获取一个人(或多个人)工作的“所有商店”的所有详细信息?按原样分组“每人”?然后你会想要所有的细节吗?即包括在每个商店工作的所有其他人。
"$staffs"甚至不是一个有效的字段并没有真正的帮助,所以甚至不清楚你期望你当前的代码产生什么。 -
我想通过 id: (done) 找到一名员工,并包括公司内所有可用的商店。我需要这个来将选定的员工转移到另一家商店。
-
您能否在edit your question 提供更多详细信息,然后发表评论以通知您何时完成。这比试图在 cmets 中写一个长篇故事(或呈现数据)要好。
标签: mongodb aggregation-framework