如何合并集合中的多个字段?

时间:2018-01-22 03:04:07

标签: linux database mongodb aggregation-framework

示例条目:

{ "_id" : "00-01@mail.ru", " pass" : 123654, "field2" : 235689, "field3" : "cccp123654", "field4" : "lhfrjy" }

期望的结果:

{ "_id" : "00-01@mail.ru", " pass" : 123654, 235689, "cccp123654", "lhfrjy" }

我想要两个最后的字段(_id和pass)。

我尝试过以下方法:

db.emails.aggregate([
    { "$project": {
        "pass": { "$setUnion": [ "$field2", "$field3" ] }
    }}
])

但是,这会导致以下错误:

2018-01-22T03:01:26.074+0000 E QUERY    [thread1] Error: command failed: {
        "ok" : 0,
        "errmsg" : "All operands of $setUnion must be arrays. One argument is of type: string",
        "code" : 17043,
        "codeName" : "Location17043"
} : aggregate failed :

_getErrorWithCode@src/mongo/shell/utils.js:25:13
    doassert@src/mongo/shell/assert.js:16:14
    assert.commandWorked@src/mongo/shell/assert.js:370:5
    DBCollection.prototype.aggregate@src/mongo/shell/collection.js:1319:5
    @(shell):1:1

有人可以协助吗?

1 个答案:

答案 0 :(得分:0)

我们可以在数组

中的1个元素之后转换$objectToArray$slice
> db.io.aggregate(
    [
        {$addFields : {arr : {$objectToArray : "$$ROOT"}}}, 
        {$project : { pass : {$slice : ["$arr.v", 1, 20 ] }}}
    ]
).pretty()

结果

{
    "_id" : "00-01@mail.ru",
    "pass" : [
        123654,
        235689,
        "cccp123654",
        "lhfrjy"
    ]
}
>