Вы можете попробовать выполнить следующие запросы агрегации:
В версии MongoDB> = 4.2
:
db.collection.aggregate([
{
$replaceWith: {
$arrayToObject: [
[
{
k: { $toString: "$_id" },
v: "$name"
}
]
]
}
}
])
Тест: mongoplayground
В версии MongoDB> = 4.0
:
db.collection.aggregate([
{
$replaceRoot: {
newRoot: {
$arrayToObject: [
[
{
k: { $toString: "$_id" },
v: "$name"
}
]
]
}
}
}
])
Тест: mongoplayground
На всякий случай, если вы ' Еще больше полей и хотите сохранить все из них в документе в конечном результате, затем попробуйте это на MongoDB версии> = 4.0
:
db.collection.aggregate([
{
$replaceRoot: {
newRoot: {
$mergeObjects: [
{
$arrayToObject: [ [ { k: { $toString: "$_id" }, v: "$name" } ] ]
},
"$$ROOT"
]
}
}
}
])
Test: mongoplayground
Примечание: Поскольку ключи в объекте должны иметь тип string
и не могут содержать тип ObjectId()
Мы преобразуем значение _id
в string
, если ваш _id
имеет тип string, то нет необходимости использовать оператор $toString
.
Ref: агрегация-конвейер-этапы