首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JSON对象上的Mongolite by/aggregate

JSON对象上的Mongolite by/aggregate
EN

Stack Overflow用户
提问于 2017-10-07 21:02:26
回答 1查看 840关注 0票数 2

在我的mongodb集合中有一个这样的json文档:更新的文档:

代码语言:javascript
复制
{
"_id" : ObjectId("59da4aef8c5d757027a5a614"),
"input" : "hi",
"output" : "Hi. How can I help you?",
"intent" : "[{\"intent\":\"greeting\",\"confidence\":0.8154089450836182}]",
"entities" : "[]",
"context" : "{\"conversation_id\":\"48181e58-dd51-405a-bb00-c875c01afa0a\",\"system\":{\"dialog_stack\":[{\"dialog_node\":\"root\"}],\"dialog_turn_counter\":1,\"dialog_request_counter\":1,\"_node_output_map\":{\"node_5_1505291032665\":[0]},\"branch_exited\":true,\"branch_exited_reason\":\"completed\"}}",
"user_id" : "50001",
"time_in" : ISODate("2017-10-08T15:57:32.000Z"),
"time_out" : ISODate("2017-10-08T15:57:35.000Z"),
"reaction" : "1"

}

我需要在intent.intent字段上执行group by,并且我正在使用带有mongolite库的Rstudio。我试过的是:

代码语言:javascript
复制
pp = '[{"$unwind": "$intent"},{"$group":{"_id":"$intent.intent", "count": {"$sum":1} }}]'

stats <- chat$aggregate(
      pipeline=pp,
      options = '{"allowDiskUse":true}'
    )

print(stats)

但是它不工作,上面代码的输出是

代码语言:javascript
复制
  _id count
1  NA   727
EN

回答 1

Stack Overflow用户

发布于 2017-10-09 02:35:11

如果意图属性类型为字符串,则保持对象为字符串。我们可以使用\"将其拆分为数组,并使用数组的第三项。

代码语言:javascript
复制
db.getCollection('test1').aggregate([
{ "$project": { intent_text : { $arrayElemAt : [ { $split: ["$intent", "\""] } ,3  ] } } },
{ "$group": {"_id": "$intent_text" , "count": {"$sum":1} }}
])

结果:

代码语言:javascript
复制
{
    "_id" : "greeting",
    "count" : 1.0
}
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46620437

复制
相关文章

相似问题

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