- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我想从嵌套数组中检索一个值,该值存在于数组中的确切位置。
我想通过为 name 执行 $slice[0,1] 然后为 value 执行 $slice[1,1] 来创建名称值对。
在尝试使用聚合之前,我想尝试在嵌套数组中进行查找。我可以在文档中的单个深度数组上做我想做的事情,如下所示:
{
"_id" : ObjectId("565cc5261506995581569439"),
"a" : [
4,
2,
8,
71,
21
]
}
我应用以下内容:db.getCollection('anothertest').find({},{_id:0, a: {$slice:[0,1]}})我得到:
{
"a" : [
4
]
}
这太棒了。但是,如果我想要 $slice [0,1] 的数组位于 objectRawOriginData.Reports.Rows.Rows.Cells 的文档中怎么办?
如果我首先可以找到,那么我想应用与聚合相同的内容。
最佳答案
您最好的选择是推迟到 MongoDB 3.2 进行部署,或者至少在此期间开始使用候选发布版本,尤其是在您的应用程序尚未准备好发布的情况下。主要原因是“投影”$slice
不适用于聚合框架,其他形式的数组匹配投影也不行。但这已在即将发布的版本中得到解决。
这将为您提供几个新的运算符,即 $slice
甚至 $arrayElemAt
可用于按聚合管道中的位置寻址数组元素。
或者:
db.getCollection('anothertest').aggregate([
{ "$project": {
"_id": 0,
"a": { "$slice": ["$a",0,1] }
}}
])
返回熟悉的:
{ "a" : [ 4 ] }
或者:
db.getCollection('anothertest').aggregate([
{ "$project": {
"_id": 0,
"a": { "$arrayElemAt": ["$a", 0] }
}}
])
这只是元素而不是数组:
{ "a" : 4 }
在发布候选版本以外的版本可用之前,当前可用的运算符使得数组的“第一个”元素变得非常容易:
db.getCollection('anothertest').aggregate([
{ "$unwind": "$a" },
{ "$group": {
"_id": "$_id",
"a": { "$first": "$a" }
}}
])
通过使用 $first
$unwind
之后的运算符.但是获得另一个索引位置变得非常迭代:
db.getCollection('anothertest').aggregate([
{ "$unwind": "$a" },
// Keeps the first element
{ "$group": {
"_id": "$_id",
"first": { "$first": "$a" },
"a": { "$push": "$a" }
}},
{ "$unwind": "$a" },
// Removes the first element
{ "$redact": {
"$cond": {
"if": { "$ne": [ "$first", "$a" ] },
"then": "$$KEEP",
"else": "$$PRUNE"
}
}},
// Top is now the second element
{ "$group": {
"_id": "$_id",
"second": { "$first": "$a" }
}}
])
等等,还有很多处理来改变它以处理可能比您正在寻找的“第 n 个”元素短的数组。如此“可能”,但丑陋且性能不佳。
还注意到“不是真的”与“索引位置”一起工作,并且纯粹是在值上匹配。因此重复的值很容易被删除,除非每个数组元素有另一个唯一标识符可供使用。 Future $unwind
还具有投影数组索引的能力,这对于其他用途很方便,但其他运算符对于这种特定情况比该功能更有用。
所以为了我的钱,我会等到你有可用的功能才能将它集成到聚合管道中,或者至少重新考虑你为什么认为你需要它并可能围绕它进行设计。
关于Mongodb 聚合一个 $slice 以从嵌套数组中获取精确位置的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34009314/
我正在尝试创建一个包含 int[][] 项的数组 即 int version0Indexes[][4] = { {1,2,3,4}, {5,6,7,8} }; int version1Indexes[
我有一个整数数组: private int array[]; 如果我还有一个名为 add 的方法,那么以下有什么区别: public void add(int value) { array[va
当您尝试在 JavaScript 中将一个数组添加到另一个数组时,它会将其转换为一个字符串。通常,当以另一种语言执行此操作时,列表会合并。 JavaScript [1, 2] + [3, 4] = "
根据我正在阅读的教程,如果您想创建一个包含 5 列和 3 行的表格来表示这样的数据... 45 4 34 99 56 3 23 99 43 2 1 1 0 43 67 ...它说你可以使用下
我通常使用 python 编写脚本/程序,但最近开始使用 JavaScript 进行编程,并且在使用数组时遇到了一些问题。 在 python 中,当我创建一个数组并使用 for x in y 时,我得
我有一个这样的数组: temp = [ 'data1', ['data1_a','data1_b'], ['data2_a','data2_b','data2_c'] ]; // 我想使用 toStr
rent_property (table name) id fullName propertyName 1 A House Name1 2 B
这个问题在这里已经有了答案: 关闭13年前。 Possible Duplicate: In C arrays why is this true? a[5] == 5[a] array[index] 和
使用 Excel 2013。经过多年的寻找和适应,我的第一篇文章。 我正在尝试将当前 App 用户(即“John Smith”)与他的电子邮件地址“jsmith@work.com”进行匹配。 使用两个
当仅在一个边距上操作时,apply 似乎不会重新组装 3D 数组。考虑: arr 1),但对我来说仍然很奇怪,如果一个函数返回一个具有尺寸的对象,那么它们基本上会被忽略。 最佳答案 这是一个不太理
我有一个包含 GPS 坐标的 MySQL 数据库。这是我检索坐标的部分 PHP 代码; $sql = "SELECT lat, lon FROM gps_data"; $stmt=$db->query
我需要找到一种方法来执行这个操作,我有一个形状数组 [批量大小, 150, 1] 代表 batch_size 整数序列,每个序列有 150 个元素长,但在每个序列中都有很多添加的零,以使所有序列具有相
我必须通过 url 中的 json 获取文本。 层次结构如下: 对象>数组>对象>数组>对象。 我想用这段代码获取文本。但是我收到错误 :org.json.JSONException: No valu
enter code here- (void)viewDidLoad { NSMutableArray *imageViewArray= [[NSMutableArray alloc] init];
知道如何对二维字符串数组执行修剪操作,例如使用 Java 流 API 进行 3x3 并将其收集回相同维度的 3x3 数组? 重点是避免使用显式的 for 循环。 当前的解决方案只是简单地执行一个 fo
已关闭。此问题需要 debugging details 。目前不接受答案。 编辑问题以包含 desired behavior, a specific problem or error, and the
我有来自 ASP.NET Web 服务的以下 XML 输出: 1710 1711 1712 1713
如果我有一个对象todo作为您状态的一部分,并且该对象包含数组列表,则列表内部有对象,在这些对象内部还有另一个数组listItems。如何更新数组 listItems 中 id 为“poi098”的对
我想将最大长度为 8 的 bool 数组打包成一个字节,通过网络发送它,然后将其解压回 bool 数组。已经在这里尝试了一些解决方案,但没有用。我正在使用单声道。 我制作了 BitArray,然后尝试
我们的数据库中有这个字段指示一周中的每一天的真/假标志,如下所示:'1111110' 我需要将此值转换为 boolean 数组。 为此,我编写了以下代码: char[] freqs = weekday
我是一名优秀的程序员,十分优秀!