我有一个名为people (见下文)的集合,其中包含了他们的个人细节和技能。从该集合中,我希望创建一个新集合(定期更新),其中包含一个ObjectID填充的特定技能的总发生量。应该用正确的对象ID更新people集合中的技能。
现在,我有以下查询:
db.people.aggregate([
{ $unwind: "$expertise" },
{ $group : {
_id: "$expertise.item",
count: { $sum: 1 },
people: { $push: "$_id" }
}
}
])这给了我新的集合,但不幸的是,我无法在该查询中生成唯一的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
}发布于 2021-02-23 05:27:52
从注释中逐字逐句地复制,这样它就可以作为一个答案显示出来。
将零赋值给_id字段将导致mongodb生成ObjectId。
db.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"
}
])https://stackoverflow.com/questions/44109041
复制相似问题