Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays MongoDB展开多个阵列_Arrays_Mongodb_Mongodb Query_Bson - Fatal编程技术网

Arrays MongoDB展开多个阵列

Arrays MongoDB展开多个阵列,arrays,mongodb,mongodb-query,bson,Arrays,Mongodb,Mongodb Query,Bson,在mongodb中,有以下结构的文档: { "_id" : ObjectId("52d017d4b60fb046cdaf4851"), "dates" : [ 1399518702000, 1399126333000, 1399209192000, 1399027545000 ], "dress_number" : "4", "name" : "J. Evans", "numbers"

在mongodb中,有以下结构的文档:

{
    "_id" : ObjectId("52d017d4b60fb046cdaf4851"),
    "dates" : [
        1399518702000,
        1399126333000,
        1399209192000,
        1399027545000
    ],
    "dress_number" : "4",
    "name" : "J. Evans",
    "numbers" : [
        "5982",
        "5983",
        "5984",
        "5985"
    ]
}
是否可以从多个阵列中展开数据并仅从阵列中获取成对元素:

{
    "dates": "1399518702000",
    "numbers": "5982"
},
{
    "dates": "1399126333000",
    "numbers": "5983"
},
{
    "dates": "1399209192000",
    "numbers": "5984"
},
{
    "dates": "1399027545000",
    "numbers": "5985"
}

从3.2版开始,您可以在两个阵列上使用
$unwind
$cmp
索引和
$match
仅匹配相等的索引

如果您只有示例文档,此解决方案将填充您编写的内容。如果您有更多文档,我不知道您希望在输出中得到什么,但是可以通过按文档的_id进行分组来解决

db.test.aggregate([
    {
        $unwind: {
            path: '$dates',
            includeArrayIndex: 'dates_index',
        }
    },
    {
        $unwind: {
            path: '$numbers',
            includeArrayIndex: 'numbers_index',
        }
    },
    {
        $project: {
            dates: 1,
            numbers: 1,
            compare: {
                $cmp: ['$dates_index', '$numbers_index']
            }
        }
    },
    {
        $match: {
            compare: 0
        }
    },
    {
        $project: {
            _id: 0,
            dates: 1,
            numbers: 1
        }
    }
])

如果
日期
数组长度和
数字
数组长度不一样会怎么样?它们总是有相同的长度。
日期
数组元素是字符串
“[13995187020000,1399126333000,1399209192000,1399027545000]”,而不是数组。@chirdam,那是个错误,如果我理解得好,谢谢你,最多可以解开两个阵列?@corry你是怎么理解的?你可以随意放松。问题是,每个元素都将成为一个文档,因此对于许多展开,结果将是巨大的db。这将很难处理,他们的问题是你想用他们做什么。我认为由于$cmp操作员的原因,不可能释放我想要的数量。关于这个问题,我提出了一个新问题