首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >mongodb字段数据转换

mongodb字段数据转换
EN

Stack Overflow用户
提问于 2015-07-20 21:25:45
回答 2查看 80关注 0票数 1

我的测试集

代码语言:javascript
复制
{ "_id" : 0, "Animals" : "cat", "activity" : "sleep" }
{ "_id" : 1, "Animals" : "dog", "activity" : "run" }
{ "_id" : 2, "Animals" : "cow", "activity" : "play" }
{ "_id" : 3, "Animals" : "cow", "activity" : "sleep" }
{ "_id" : 4, "Animals" : "cow", "activity" : "run" }
{ "_id" : 5, "Animals" : "dog", "activity" : "play" }
{ "_id" : 6, "Animals" : "cat", "activity" : "run" }

找到动物和活动的独特价值

代码语言:javascript
复制
db.test.distinct("Animals")
[ "cat", "dog", "cow" ]
db.test.distinct("service")
[ "sleep", "run", "play" ]

之后,动物和猫的-> {猫:1,狗:0,牛:0}和其他的一样

我想更改此类型的格式

代码语言:javascript
复制
{ "_id" : 0, "cat" : 1, "dog" : 0, "cow" : 0, "sleep" : 1, "run" : 0,  "play": 0 }
{ "_id" : 1, "cat" : 0, "dog" : 1, "cow" : 0, "sleep" : 0, "run" : 1,  "play": 0 }
{ "_id" : 2, "cat" : 0, "dog" : 0, "cow" : 1, "sleep" : 0, "run" : 0,  "play": 1 }
{ "_id" : 3, "cat" : 0, "dog" : 0, "cow" : 1, "sleep" : 1, "run" : 0,  "play": 0 }
{ "_id" : 4, "cat" : 0, "dog" : 0, "cow" : 1, "sleep" : 0, "run" : 1,  "play": 0 }
{ "_id" : 5, "cat" : 0, "dog" : 1, "cow" : 0, "sleep" : 0, "run" : 0,  "play": 1 }
{ "_id" : 6, "cat" : 1, "dog" : 0, "cow" : 0, "sleep" : 0, "run" : 1,  "play": 0 }

我该怎么做呢?

EN

回答 2

Stack Overflow用户

发布于 2015-07-20 21:30:30

对于聚合框架,我将按如下方式完成:

_id

  • count
  • activity
  • 按升序对结果进行排序

代码语言:javascript
复制
db.test.aggregate([ {
$group: {
_id:    "$_id",
cat:   {$sum: {$cond: [{"$eq": ["$Animals",  "cat"]},   1, 0 ] } },
dog:   {$sum: {$cond: [{"$eq": ["$Animals",  "dog"]},   1, 0 ] } },
cow:   {$sum: {$cond: [{"$eq": ["$Animals",  "cow"]},   1, 0 ] } },
sleep: {$sum: {$cond: [{"$eq": ["$activity", "sleep"]}, 1, 0 ] } },
run:   {$sum: {$cond: [{"$eq": ["$activity", "run"]},   1, 0 ] } },
play:  {$sum: {$cond: [{"$eq": ["$activity", "play"]},  1, 0 ] } }
} }, 
{ $sort: {_id: 1}}
] )

mongo shell中的结果看起来像您正在寻找的:

代码语言:javascript
复制
{ "_id" : 0, "cat" : 1, "dog" : 0, "cow" : 0, "sleep" : 1, "run" : 0, "play" : 0 }
{ "_id" : 1, "cat" : 0, "dog" : 1, "cow" : 0, "sleep" : 0, "run" : 1, "play" : 0 }
{ "_id" : 2, "cat" : 0, "dog" : 0, "cow" : 1, "sleep" : 0, "run" : 0, "play" : 1 }
{ "_id" : 3, "cat" : 0, "dog" : 0, "cow" : 1, "sleep" : 1, "run" : 0, "play" : 0 }
{ "_id" : 4, "cat" : 0, "dog" : 0, "cow" : 1, "sleep" : 0, "run" : 1, "play" : 0 }
{ "_id" : 5, "cat" : 0, "dog" : 1, "cow" : 0, "sleep" : 0, "run" : 0, "play" : 1 }
{ "_id" : 6, "cat" : 1, "dog" : 0, "cow" : 0, "sleep" : 0, "run" : 1, "play" : 0 }
票数 3
EN

Stack Overflow用户

发布于 2015-07-20 21:58:19

我认为您可以按如下方式显示use aggregation

代码语言:javascript
复制
db.test.aggregate([
    {$group : {
        _id : $_id,
        cat : {$cond : {if: { $eq: [ "$Animals", "cat" ] }, then: 1, else: 0}},
        dog : {$cond : {if: { $eq: [ "$Animals", "dog" ] }, then: 1, else: 0}},
        cow : {$cond : {if: { $eq: [ "$Animals", "cow" ] }, then: 1, else: 0}},
        sleep : {$cond : {if: { $eq: [ "$activity", "sleep" ] }, then: 1, else: 0}},
        run : {$cond : {if: { $eq: [ "$activity", "run" ] }, then: 1, else: 0}},
        play : {$cond : {if: { $eq: [ "$activity", "play" ] }, then: 1, else: 0}}
    }}
]);

这段代码使用$cond聚合运算符+ $eq比较运算符。

阅读更多内容:

http://docs.mongodb.org/manual/reference/operator/aggregation/group/#group-aggregation http://docs.mongodb.org/manual/reference/operator/aggregation/cond/#cond-aggregation http://docs.mongodb.org/manual/core/aggregation-pipeline/

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31517751

复制
相关文章

相似问题

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