Как $project ObjectId для строкового значения в агрегате mongodb?

Есть ли какой-нибудь оператор, который я мог бы использовать в агрегатной функции для получения строки вместо ObjectId в ответ?

db.something.aggregate([ {$match: {'property': {$exists:true}} }, {$project: {stringId: '$_id.???'}}])

Ответ 1

В агрегированной функции нет прямого оператора для получения String из ObjectId.

После версии 2.6 Вы можете использовать метод ObjectId.toString() для преобразования объекта ObjectId в строку. Сначала вы сопоставляете и проектируете свой ObjectID. Затем вы можете преобразовать этот идентификатор объекта в строку с помощью ObjectId.toString().

db.something.aggregate([{"$match":{'property': {$exists:true}}},{"$project":{"_id":1}}]) 

И затем используйте полученный объект и получите строку как ответ, используя ObjectId.toString()

Изменить: вы можете получить доступ к атрибуту str идентификатора объекта, используя

ObjectId("507f191e810c19729de860ea").str

Ответ 2

Вы можете сделать это inline с помощью оператора $concat:

db.something.aggregate(
    [
        { $match :
            { 'property' :
                { $exists:true }
            }
        },
        { $project:
            { stringId:
                { $concat: [ ObjectId().str ] }
            }
        }
    ]
)