首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >生成对象的集合

生成对象的集合
EN

Stack Overflow用户
提问于 2017-05-22 09:14:30
回答 1查看 5.8K关注 0票数 4

我有一个名为people (见下文)的集合,其中包含了他们的个人细节和技能。从该集合中,我希望创建一个新集合(定期更新),其中包含一个ObjectID填充的特定技能的总发生量。应该用正确的对象ID更新people集合中的技能。

现在,我有以下查询:

代码语言:javascript
复制
db.people.aggregate([ 
    { $unwind: "$expertise" },
    { $group : { 
        _id: "$expertise.item",
        count: { $sum: 1 },
        people: { $push: "$_id" } 
        } 
    }
])

这给了我新的集合,但不幸的是,我无法在该查询中生成唯一的objectID。它一直告诉我一个累加器对象是需要的。

如何生成具有每个技能的唯一对象的技能数据库,并使用正确的技能对象更新people集合?

People

一个与人,他们的个人细节和他们的特殊技能的集合。我已经删除了这个例子的大部分数据。

代码语言:javascript
复制
{
"_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在数组中被重用。它应该会产生这样的结果:

代码语言:javascript
复制
{
    "_id" : ObjectId("591c5d9be75d8a0d456324"),
    "item" : "High Availability Systems",
    "people" : [ 
        "591c5d9be75d8a0d34f61786",
        "591c5d9be75d8a0d34f61787"
    ],
    "count" : 2
},
{
    "_id" : ObjectId("591c5d9be75d8a0d451234"),
    "item" : "Java",
    "people" : [ 
        "591c5d9be75d8a0d34f61786"
    ],
    "count" : 1
}
EN

回答 1

Stack Overflow用户

发布于 2021-02-23 05:27:52

从注释中逐字逐句地复制,这样它就可以作为一个答案显示出来。

将零赋值给_id字段将导致mongodb生成ObjectId。

代码语言:javascript
复制
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"
   }
])
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44109041

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档