two - sort mongodb find
¿Cómo $ Project ObjectId para encadenar valor en mongodb agregado? (4)
¿Hay un operador que pueda usar en la función agregada para obtener una cadena en lugar de ObjectId en respuesta?
db.something.aggregate([ {$match: {''property'': {$exists:true}} }, {$project: {stringId: ''$_id.???''}}])
En mongo db versión 3.4 puedes hacer esto:
db.collection.aggregate([
{
$project:{
"_id": ObjectId("$_id".str).valueOf()
}
}])
Mongodb 4.0 ha introducido el operador de agregación $toString
. Por lo tanto, ahora puede convertir ObjectId a cadena fácilmente
db.collection.aggregate([
{
$project: {
_id: {
$toString: "$_id"
}
}
}
])
O viceversa, usando la agregación $toObjectId
db.collection.aggregate([
{
$project: {
_id: {
$toObjectId: "$_id"
}
}
}
])
No hay un operador directo en función agregada para obtener String desde ObjectId.
Después de la versión 2.6, puede usar el método ObjectId.toString()
para convertir su ObjectId en una cadena. Primero emparejas y proyectas tu ObjectID. Luego, puede convertir este ID de objeto en una cadena utilizando ObjectID.toString()
.
db.something.aggregate([{"$match":{''property'': {$exists:true}}},{"$project":{"_id":1}}])
Y luego use el Objeto resultante y obtenga la cadena como respuesta usando ObjectID.tostring()
Editar: puede acceder al atributo str del id de objeto usando
ObjectId("507f191e810c19729de860ea").str
fuente: documentos mongodb
Puedes hacerlo en línea usando el operador $concat
:
db.something.aggregate(
[
{ $match :
{ ''property'' :
{ $exists:true }
}
},
{ $project:
{ stringId:
{ $concat: [ ObjectId().str ] }
}
}
]
)