示例条目:
{ "_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
有人可以协助吗?
答案 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"
]
}
>