【问题标题】:return 0 instead of nothing for attribute value that is not available in any collections对于任何集合中不可用的属性值,返回 0 而不是什么都没有
【发布时间】:2015-01-28 05:20:06
【问题描述】:

我有一份文件如下:

{
"_id" : ObjectId("5491d65bf315c2726a19ffe0"),
"tweetID" : NumberLong(535063274220687360),
"tweetText" : "19 RT Toronto @SunNewsNetwork: WATCH: When it comes to taxes, regulations, and economic freedom, is Canada more \"American\" than America? http://t.co/D?",
"retweetCount" : 1,
"Added" : ISODate("2014-11-19T04:00:00.000Z"),
"tweetLat" : 0,
"tweetLon" : 0,
"url" : "http://t.co/DH0xj0YBwD ",
"sentiment" : 18
}

现在我想获取所有这样的文档,其中添加在 2014-11-19 和 2014-11-23 之间,但我们应该注意,例如这个日期可能没有数据:2014-11-21 和现在问题开始了:当这种情况发生时,我想要 0 作为该日期的情绪总和,而不是什么都不返回(我知道我可以在 java 中检查它,但这是不合理的),我的代码如下,除了日期之外它工作正常那是不可用的,它什么都不返回,而不是 0:

andArray.add(new BasicDBObject("Added", new BasicDBObject("$gte",
            startDate)));
    andArray.add(new BasicDBObject("Added", new BasicDBObject("$lte",
            endDate)));
DBObject where = new BasicDBObject("$match", new BasicDBObject("$and",
            andArray));
    stages.add(where);
DBObject groupFields = new BasicDBObject("_id", "$Added");
    groupFields.put("value",
            new BasicDBObject("$avg", "$sentiment"));
    DBObject groupBy = new BasicDBObject("$group", groupFields);
    stages.add(groupBy);
    DBObject project = new BasicDBObject("_id", 0);
    project.put("value", 1);
    project.put("Date", "$_id");
    stages.add(new BasicDBObject("$project", project));

    DBObject sort = new BasicDBObject("$sort", new BasicDBObject("Date", 1));
    stages.add(sort);
    AggregationOutput output = collectionG.aggregate(stages);

现在我想要我拥有的集合中不可用的日期值为 0, 例如考虑下面的 2014-11-21:

  [ { "value" : 6.0 , "Date" : { "$date" : "2014-11-19T04:00:00.000Z"}} , {    "value" : 20.0 , "Date" : { "$date" : "2014-11-20T04:00:00.000Z"}},{ "value" : 0    , "Date" : { "$date" : "2014-11-21T04:00:00.000Z"}}]

而不是:

 [ { "value" : 6.0 , "Date" : { "$date" : "2014-11-19T04:00:00.000Z"}} , { "value" : 20.0 , "Date" : { "$date" : "2014-11-20T04:00:00.000Z"}}}]

有可能吗?

【问题讨论】:

    标签: mongodb-query mongodb-java


    【解决方案1】:

    为什么检查 Java 不合理?将“无”的平均值设置为 0 是否合理?

    根据您的问题的上下文,一种解决方案是让您插入 0 情绪的虚拟记录。

    【讨论】:

    • 谢谢你的回答......这是不合理的,因为我有一个来自用户的请求超过 100 天,然后想象一个 100 或 200 或 300 的 for 循环......所以这需要时间,这是用户无法接受的
    • 你确定你不能用虚拟数据预先填充你的 mongDB,比如未来 10 年,甚至 100 年?在 100 年后,这“只是”36500+ 行.....
    • 是的,因为上面的文档是我真正拥有的更简单的版本
    猜你喜欢
    • 2023-03-16
    • 1970-01-01
    • 1970-01-01
    • 2021-12-20
    • 1970-01-01
    • 2020-08-06
    • 1970-01-01
    • 2016-09-06
    • 1970-01-01
    相关资源
    最近更新 更多