我有一个叫做people(如下所示)的集合,包含他们的个人信息和技能。我想从那个集合中创建一个新的集合(定期更新),其中包含填充有ObjectID的某种技能的总次数。在people集合中的技能应该用正确的Object ID进行更新。
现在我有以下查询:
db.people.aggregate([
{ $unwind: "$expertise" },
{ $group : {
_id: "$expertise.item",
count: { $sum: 1 },
people: { $push: "$_id" }
}
}
])
这让我得到了新的集合,但不幸的是我无法在查询中生成唯一的objectID,它一直告诉我需要累加器对象。
如何使用每个技能的唯一ObjectID生成技能数据库,并使用正确的技能ObjectID更新People集合?
People 一个包含人员、个人详细信息和特定技能集的集合。为了本示例,我已经删除了大部分数据。
{
"_id" : ObjectId("591c5d9be75d8a0d34f61786"),
"id" : 1,
"username" : "user@name.com",
"expertise" : [
{
"niveau" : 5,
"item" : "High Availability Systems"
},
{
"niveau" : 8,
"item" : "Object Oriented Design"
}
],
"function" : "functionname"
},
{
"_id" : ObjectId("591c5d9be75d8a0d34f61787"),
"id" : 2,
"username" : "user@name.com",
"expertise" : [
{
"niveau" : 9,
"item" : "High Availability Systems"
},
{
"niveau" : 4,
"item" : "Java"
}
],
"function" : "functionname"
}
新系列:技能
从这个系列中,我想创建一个新的系列,其中人的objectID在一个数组中被重复使用。它应该得出类似这样的结果:
{
"_id" : ObjectId("591c5d9be75d8a0d456324"),
"item" : "High Availability Systems",
"people" : [
"591c5d9be75d8a0d34f61786",
"591c5d9be75d8a0d34f61787"
],
"count" : 2
},
{
"_id" : ObjectId("591c5d9be75d8a0d451234"),
"item" : "Java",
"people" : [
"591c5d9be75d8a0d34f61786"
],
"count" : 1
}
$out
。 - Neil Lunndb.people.aggregate([ { $unwind: "$expertise" }, { $group : { _id: "$expertise.item", count: { $sum: 1 }, people: { $push: "$_id" } } }, { $project: { "_id" : 0, item: "$_id", "count": 1, "people": 1 } }, { $out: "newskills" } ])
- Matthijs Mali