当前位置: 首页 > 知识库问答 >
问题:

在$project中,我们可以替换_id并使_id值为1、2、3。。。n表示数组中的所有文档

商经业
2023-03-14

在mongodb中使用project,当我们将输出作为数组时,是否可以替换\u id并将\u id值设置为1、2、3。。。n
用于数组中的所有文档。'“项目”正在提供以下输出:
查询:

     db.premiumChange.aggregate([
     {'$unwind': '$history'}
     ,{'$match': {
       'history.startDate': {'$gte': ISODate('2018-01-21T11:13:14.000Z')}
       ,'history.endDate': {'$lte':ISODate('2018-02-20T11:13:14.000Z')}
     }}
     ,{'$facet':{'APTCChange':[{'$match': {'history.APTCChange': {'$gt':                          10}}}
     ,{'$limit':8}
     ,{ $project: {
     APTCChange: '$history.APTCChange'}}]
   ,"PremChange": [ {$match:{"history.APTCChange":{"$gt":10}}}
   ,{'$limit':1}
   ,{ $project: {
   APTCChange: '$history.APTCChange'}}]
 ,"MbrRespChg": [ {$match:{"history.MbrRespChg":{"$gt":10}}} 
 ,{'$limit':1}
 ,{ $project: {

 APTCChange: '$history.APTCChange'}}, {'$limit':1}] } }
 ])

上面的查询给出了下面的结果,自动添加了数组中文档的_id。但是根据我的要求,数组中的每个文档都应该有_id为0,1,2。。N

    {
     "APTCChange" : [ 
    {
        "_id" : "HCCIDM1234567A",
        "APTCChange" : 1200,
    },
    {
        "_id" : "HCCIDM1234567B",
        "APTCChange" : 1200,
    }],

     "PremChange" : [ 
    {
        "_id" : "HCCIDM1234567A",
        "APTCChange" : 1200,
    },
    {
        "_id" : "HCCIDM1234567B",
        "APTCChange" : 1200,
    }],

     "MbrRespChg" : [ 
    {
        "_id" : "HCCIDM1234567A",
        "APTCChange" : 1200,
    },
    {
        "_id" : "HCCIDM1234567B",
        "APTCChange" : 1200,
    }]}

相反,我需要像下面:

   {
   "APTCChange" : [ 
   {
        "_id" : 0,
        "APTCChange" : 1200,
   },
   {
        "_id" : 1,
        "APTCChange" : 1200,
   }],

   "PremChange" : [ 
   {
    "_id" : 3,
    "APTCChange" : 1200,
   },
   {
    "_id" : 4,
    "APTCChange" : 1200,
   }],

   "MbrRespChg" : [ 
   {
    "_id" : 5,
    "APTCChange" : 1200,
   },
   {
    "_id" : 6,
    "APTCChange" : 1200,
   }]}

共有1个答案

田永春
2023-03-14

尝试此聚合,我们通过将先前数组$size与元素的当前数组索引相加来计算_id

管道

db.col.aggregate([
    {$project : {
        APTCChange : {
            $map : {
                input : "$APTCChange",
                as : "a",
                in : {
                    _id : {$indexOfArray : ["$APTCChange._id", "$$a._id"]},
                    APTCChange : "$$a.APTCChange"
                }
            }
        },
        PremChange : {
            $map : {
                input : "$PremChange",
                as : "a",
                in : {
                    _id : {$add : [{$indexOfArray : ["$PremChange._id", "$$a._id"]}, {$size : "$APTCChange"}]},
                    APTCChange : "$$a.APTCChange"
                }
            }
        },
        MbrRespChg : {
            $map : {
                input : "$MbrRespChg",
                as : "a",
                in : {
                    _id : {$add : [{$indexOfArray : ["$MbrRespChg._id", "$$a._id"]}, {$size : "$APTCChange"}, {$size : "$MbrRespChg"}]},
                    APTCChange : "$$a.APTCChange"
                }
            }
        }
    }}
]).pretty()

结果

{
    "_id" : ObjectId("5a9064a2996e36f33cd29dd0"),
    "APTCChange" : [
        {
            "_id" : 0,
            "APTCChange" : 1200
        },
        {
            "_id" : 1,
            "APTCChange" : 1200
        }
    ],
    "PremChange" : [
        {
            "_id" : 2,
            "APTCChange" : 1200
        },
        {
            "_id" : 3,
            "APTCChange" : 1200
        }
    ],
    "MbrRespChg" : [
        {
            "_id" : 4,
            "APTCChange" : 1200
        },
        {
            "_id" : 5,
            "APTCChange" : 1200
        }
    ]
}
> 
 类似资料:
  • 问题内容: 从ElasticSearch获取某个索引的所有_id的最快方法是什么?使用简单的查询是否可能?我的索引之一包含大约20,000个文档。 问题答案: 编辑:请也阅读@Aleck Landgraf的答案 您只想要elasticsearch-internal 字段吗?还是文档中的字段? 对于前者,请尝试 Note 2017更新: 该帖子最初包含在内,但此后名称已更改,并且是新值。 结果将仅包

  • 问题内容: 首先,当我问一个非常基本且特殊的问题时,我感到很遗憾;但是我对Java和编程都不陌生。我研究了system.out.println()中的“ out”是系统类的对象。“ out”可以用系统类的任何其他对象替换吗?如果是这样,成员是什么? 问题答案: 您可以拨打任何电话。如果您查看javadoc,则会发现另一个静态字段,即。例如: 如果您想用自己的输出流实际替换标准,则可以将流传递给或相

  • 问题内容: 可以在mongo db中像在SQL中那样选择集合的文档: 还是如果我有一个我必须一个一个地选择,然后重新组合结果? 问题答案: 简单 :) 摘自:http : //www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-%24in

  • 我不会保存对象就业没有_id我想保存只是属性"就业"如下: 此文档和在db上记录的文档,具有自动生成的_id属性 我的Attribute employe模式为:

  • 问题内容: 有谁知道如何在PHP中将数字1、2或3转换为其文本版本(一,二,三)?我只需要从1转换为99。我知道我可以写一个很大的switch语句,但这太荒谬了。 问题答案: 梨有一个软件包Numbers_Words:

  • 问题内容: 我想替换所有我的Elasticsearch索引文档中的单个用户名。是否有API查询? 我尝试搜索多个但找不到。有人知道吗? 我的情况: 我在名为“ test”的索引中具有上述数据,并键入“ movies”。在这里,我想用“ alice”代替所有的“ bob”名称。 谢谢 问题答案: 通过查询更新是解决之道。 注意:请确保启用动态脚本,以使其起作用。