我有一个这样的 mongo 数据库数据。
{
"_id": "1234",
"programId": ObjectId("1234"),
"userId": "23",
"courses": [
{
"stateName": "Stage 1",
"duration": "5",
"lag": "2",
"courseType": "3",
"scheduledStartDate": ISODate("2018-11-27T14:01:30.000+05:30"),
"scheduledEndDate": ISODate("2018-12-01T14:01:30.000+05:30"),
"transitionType": "onAssignment",
"courseProgress": 100,
},
{
"stateName": "2nd stage",
"duration": "60",
"lag": "60",
"courseType": "2",
"scheduledStartDate": ISODate("2018-11-27T14:01:30.000+05:30"),
"scheduledEndDate": ISODate("2019-02-01T14:01:30.000+05:30"),
"transitionType": "onAssignment",
"courseProgress": 100
},
{
"stateName": "3rd Stage",
"duration": "5",
"lag": "2",
"courseType": "1",
"scheduledStartDate": ISODate("2018-11-27T14:01:30.000+05:30"),
"scheduledEndDate": ISODate("2019-04-07T14:01:30.000+05:30"),
"transitionType": "onAssignment",
"courseProgress": 100
},
{
"stateName": "4th stage",
"duration": 1,
"lag": "10",
"courseType": "1",
"scheduledStartDate": ISODate("2018-11-27T14:01:30.000+05:30"),
"scheduledEndDate": ISODate("2019-04-10T14:01:30.000+05:30"),
"transitionType": "onAssignment",
"courseProgress": 100
},
{
"stateName": "5th",
"duration": "1",
"lag": "0",
"courseType": "3",
"scheduledStartDate": ISODate("2018-11-27T14:01:30.000+05:30"),
"scheduledEndDate": ISODate("2019-04-21T14:01:30.000+05:30"),
"transitionType": "onAssignment",
"courseProgress": 100
},
{
"stateName": "6th",
"duration": "5",
"lag": "5",
"courseType": "3",
"scheduledStartDate": ISODate("2018-11-27T14:01:30.000+05:30"),
"scheduledEndDate": ISODate("2019-04-26T14:01:30.000+05:30"),
"transitionType": "onAssignment",
"courseProgress": 100
},
{
"stateName": "7th ",
"duration": 1,
"lag": "9",
"courseType": "3",
"scheduledStartDate": ISODate("2018-11-27T14:01:30.000+05:30"),
"scheduledEndDate": ISODate("2019-05-02T14:01:30.000+05:30"),
"transitionType": "onAssignment",
"courseProgress": 100
},
{
"stateName": "8th",
"duration": "66",
"lag": 0,
"courseType": "3",
"scheduledStartDate": ISODate("2018-11-27T14:01:30.000+05:30"),
"scheduledEndDate": ISODate("2019-07-16T14:01:30.000+05:30"),
"transitionType": "onAssignment",
"courseProgress": 100
},
{
"stateName": "9th",
"duration": "61",
"lag": 0,
"courseType": "1",
"scheduledStartDate": ISODate("2018-11-27T14:01:30.000+05:30"),
"scheduledEndDate": ISODate("2019-09-15T14:01:30.000+05:30"),
"transitionType": "onAssignment",
"courseProgress": 100
},
{
"stateName": "10th",
"duration": "80",
"lag": 0,
"courseType": "3",
"scheduledStartDate": ISODate("2018-11-27T14:01:30.000+05:30"),
"scheduledEndDate": ISODate("2019-12-04T14:01:30.000+05:30"),
"transitionType": "onAssignment",
"courseProgress": 100
},
{
"stateName": "11th",
"duration": "8",
"lag": 0,
"courseType": "3",
"scheduledStartDate": ISODate("2018-11-27T14:01:30.000+05:30"),
"scheduledEndDate": ISODate("2019-12-12T14:01:30.000+05:30"),
"transitionType": "onAssignment",
"courseProgress": 100
}
],
"userStatus": 1,
"modified": ISODate("2018-11-27T14:01:32.082+05:30"),
"created": ISODate("2018-11-27T14:01:32.082+05:30"),
"completionStatus": "F",
"currentState": {
"courseId": "116",
"courseProgress": 100
}
}
我想从类(class)数组中删除 scheduledStartDate、scheduledEndDate、courseProgress,第一个索引除外。
我想要这样的结果
{
"_id": "1234",
"programId": ObjectId("1234"),
"userId": "23",
"courses": [
{
"stateName": "Stage 1",
"duration": "5",
"lag": "2",
"courseType": "3",
"scheduledStartDate": ISODate("2018-11-27T14:01:30.000+05:30"),
"scheduledEndDate": ISODate("2018-12-01T14:01:30.000+05:30"),
"transitionType": "onAssignment",
"courseProgress": 100,
},
{
"stateName": "2nd stage",
"duration": "60",
"lag": "60",
"courseType": "2",
"transitionType": "onAssignment",
},
{
"stateName": "3rd Stage",
"duration": "5",
"lag": "2",
"courseType": "1",
"transitionType": "onAssignment",
},
{
"stateName": "4th stage",
"duration": 1,
"lag": "10",
"courseType": "1",
"transitionType": "onAssignment",
},
{
"stateName": "5th",
"duration": "1",
"lag": "0",
"courseType": "3",
"transitionType": "onAssignment",
},
{
"stateName": "6th",
"duration": "5",
"lag": "5",
"courseType": "3",
"transitionType": "onAssignment",
},
{
"stateName": "7th ",
"duration": 1,
"lag": "9",
"courseType": "3",
"transitionType": "onAssignment",
},
{
"stateName": "8th",
"duration": "66",
"lag": 0,
"courseType": "3",
"transitionType": "onAssignment",
},
{
"stateName": "9th",
"duration": "61",
"lag": 0,
"courseType": "1",
"transitionType": "onAssignment",
},
{
"stateName": "10th",
"duration": "80",
"lag": 0,
"courseType": "3",
"transitionType": "onAssignment",
},
{
"stateName": "11th",
"duration": "8",
"lag": 0,
"courseType": "3",
"transitionType": "onAssignment",
}
],
"userStatus": 1,
"modified": ISODate("2018-11-27T14:01:32.082+05:30"),
"created": ISODate("2018-11-27T14:01:32.082+05:30"),
"completionStatus": "F",
"currentState": {
"courseId": "116",
"courseProgress": 100
}
}
最佳答案
使用$range聚合以找到数组 courses 的索引,然后使用 $map 遍历数组长度聚合并移除索引不等于($ne)的字段("$$REMOVE")到 0
对于 mongodb 3.6 及以上
db.collection.aggregate([
{ "$addFields": {
"courses": {
"$map": {
"input": { "$range": [0, {"$size": "$courses" }] },
"in": {
"$let": {
"vars": { "c": {"$arrayElemAt": ["$courses", "$$this"]} },
"in": {
"stateName": "$$c.stateName",
"duration": "$$c.duration",
"lag": "$$c.lag",
"courseType": "$$c.courseType",
"scheduledStartDate": { "$cond": [{ "$ne": ["$$this", 0] }, "$$REMOVE", "$$c.scheduledStartDate"] },
"scheduledEndDate": "$$c.scheduledEndDate",
"scheduledEndDate": { "$cond": [{ "$ne": ["$$this", 0] }, "$$REMOVE", "$$c.scheduledEndDate"] },
"transitionType": "$$c.transitionType"
}
}
}
}
}
}}
])
对于 3.6
之前的 mongodbdb.collection.aggregate([
{ "$addFields": {
"courses": {
"$map": {
"input": { "$range": [0, { "$size": "$courses" }] },
"in": {
"$let": {
"vars": { "c": { "$arrayElemAt": ["$courses", "$$this"] }},
"in": {
"$cond": [
{ "$eq": ["$$this", 0] },
{
"stateName": "$$c.stateName",
"duration": "$$c.duration",
"lag": "$$c.lag",
"courseType": "$$c.courseType",
"scheduledStartDate": "$$c.scheduledStartDate",
"scheduledEndDate": "$$c.scheduledEndDate",
"stateName": "$$c.stateName",
"transitionType": "$$c.transitionType"
},
{
"stateName": "$$c.stateName",
"duration": "$$c.duration",
"lag": "$$c.lag",
"courseType": "$$c.courseType",
"transitionType": "$$c.transitionType"
}
]
}
}
}
}
}
}}
])
哪个会 return
[
{
"_id": "1234",
"completionStatus": "F",
"courses": [
{
"courseProgress": 100,
"courseType": "3",
"duration": "5",
"lag": "2",
"scheduledEndDate": ISODate("2018-12-01T08:31:30Z"),
"scheduledStartDate": ISODate("2018-11-27T08:31:30Z"),
"stateName": "Stage 1",
"transitionType": "onAssignment"
},
{
"courseType": "2",
"duration": "60",
"lag": "60",
"stateName": "2nd stage",
"transitionType": "onAssignment"
},
{
"courseType": "1",
"duration": "5",
"lag": "2",
"stateName": "3rd Stage",
"transitionType": "onAssignment"
},
{
"courseType": "1",
"duration": 1,
"lag": "10",
"stateName": "4th stage",
"transitionType": "onAssignment"
},
{
"courseType": "3",
"duration": "1",
"lag": "0",
"stateName": "5th",
"transitionType": "onAssignment"
},
{
"courseType": "3",
"duration": "5",
"lag": "5",
"stateName": "6th",
"transitionType": "onAssignment"
},
{
"courseType": "3",
"duration": 1,
"lag": "9",
"stateName": "7th ",
"transitionType": "onAssignment"
},
{
"courseType": "3",
"duration": "66",
"lag": 0,
"stateName": "8th",
"transitionType": "onAssignment"
},
{
"courseType": "1",
"duration": "61",
"lag": 0,
"stateName": "9th",
"transitionType": "onAssignment"
},
{
"courseType": "3",
"duration": "80",
"lag": 0,
"stateName": "10th",
"transitionType": "onAssignment"
},
{
"courseType": "3",
"duration": "8",
"lag": 0,
"stateName": "11th",
"transitionType": "onAssignment"
}
],
"created": ISODate("2018-11-27T08:31:32.082Z"),
"currentState": {
"courseId": "116",
"courseProgress": 100
},
"modified": ISODate("2018-11-27T08:31:32.082Z"),
"userId": "23",
"userStatus": 1
}
]
关于mongodb - 删除除第一个索引之外的 mongodb 数组键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53517858/
我有多个ActiveRecord子类Item的实例数组,我需要根据最早的事件循环打印。在这种情况下,我需要打印付款和维护日期,如下所示:ItemAmaintenancerequiredin5daysItemBpaymentrequiredin6daysItemApaymentrequiredin7daysItemBmaintenancerequiredin8days我目前有两个查询,用于查找maintenance和payment项目(非排他性查询),并输出如下内容:paymentrequiredin...maintenancerequiredin...有什么方法可以改善上述(丑陋的)代
我的代码目前看起来像这样numbers=[1,2,3,4,5]defpop_threepop=[]3.times{pop有没有办法在一行中完成pop_three方法中的内容?我基本上想做类似numbers.slice(0,3)的事情,但要删除切片中的数组项。嗯...嗯,我想我刚刚意识到我可以试试slice! 最佳答案 是numbers.pop(3)或者numbers.shift(3)如果你想要另一边。 关于ruby-多次弹出/移动ruby数组,我们在StackOverflow上找到一
使用带有Rails插件的vim,您可以创建一个迁移文件,然后一次性打开该文件吗?textmate也可以这样吗? 最佳答案 你可以使用rails.vim然后做类似的事情::Rgeneratemigratonadd_foo_to_bar插件将打开迁移生成的文件,这正是您想要的。我不能代表textmate。 关于ruby-使用VimRails,您可以创建一个新的迁移文件并一次性打开它吗?,我们在StackOverflow上找到一个类似的问题: https://sta
我需要读入一个包含数字列表的文件。此代码读取文件并将其放入二维数组中。现在我需要获取数组中所有数字的平均值,但我需要将数组的内容更改为int。有什么想法可以将to_i方法放在哪里吗?ClassTerraindefinitializefile_name@input=IO.readlines(file_name)#readinfile@size=@input[0].to_i@land=[@size]x=1whilex 最佳答案 只需将数组映射为整数:@land边注如果你想得到一条线的平均值,你可以这样做:values=@input[x]
我需要从一个View访问多个模型。以前,我的links_controller仅用于提供以不同方式排序的链接资源。现在我想包括一个部分(我假设)显示按分数排序的顶级用户(@users=User.all.sort_by(&:score))我知道我可以将此代码插入每个链接操作并从View访问它,但这似乎不是“ruby方式”,我将需要在不久的将来访问更多模型。这可能会变得很脏,是否有针对这种情况的任何技术?注意事项:我认为我的应用程序正朝着单一格式和动态页面内容的方向发展,本质上是一个典型的网络应用程序。我知道before_filter但考虑到我希望应用程序进入的方向,这似乎很麻烦。最终从任何
我想要做的是有2个不同的Controller,client和test_client。客户端Controller已经构建,我想创建一个test_clientController,我可以使用它来玩弄客户端的UI并根据需要进行调整。我主要是想绕过我在客户端中内置的验证及其对加载数据的管理Controller的依赖。所以我希望test_clientController加载示例数据集,然后呈现客户端Controller的索引View,以便我可以调整客户端UI。就是这样。我在test_clients索引方法中试过这个:classTestClientdefindexrender:template=>
我有一个对象has_many应呈现为xml的子对象。这不是问题。我的问题是我创建了一个Hash包含此数据,就像解析器需要它一样。但是rails自动将整个文件包含在.........我需要摆脱type="array"和我该如何处理?我没有在文档中找到任何内容。 最佳答案 我遇到了同样的问题;这是我的XML:我在用这个:entries.to_xml将散列数据转换为XML,但这会将条目的数据包装到中所以我修改了:entries.to_xml(root:"Contacts")但这仍然将转换后的XML包装在“联系人”中,将我的XML代码修改为
查看Ruby的CSV库的文档,我非常确定这是可能且简单的。我只需要使用Ruby删除CSV文件的前三列,但我没有成功运行它。 最佳答案 csv_table=CSV.read(file_path_in,:headers=>true)csv_table.delete("header_name")csv_table.to_csv#=>ThenewCSVinstringformat检查CSV::Table文档:http://ruby-doc.org/stdlib-1.9.2/libdoc/csv/rdoc/CSV/Table.html
我正在使用puppet为ruby程序提供一组常量。我需要提供一组主机名,我的程序将对其进行迭代。在我之前使用的bash脚本中,我只是将它作为一个puppet变量hosts=>"host1,host2"我将其提供给bash脚本作为HOSTS=显然这对ruby不太适用——我需要它的格式hosts=["host1","host2"]自从phosts和putsmy_array.inspect提供输出["host1","host2"]我希望使用其中之一。不幸的是,我终其一生都无法弄清楚如何让它发挥作用。我尝试了以下各项:我发现某处他们指出我需要在函数调用前放置“function_”……这
这个问题在这里已经有了答案:Checktoseeifanarrayisalreadysorted?(8个答案)关闭9年前。我只是想知道是否有办法检查数组是否在增加?这是我的解决方案,但我正在寻找更漂亮的方法:n=-1@arr.flatten.each{|e|returnfalseife