web-dev-qa-db-fra.com

comment $ projeter ObjectId pour chaîne de valeur dans agrégat mongodb?

Existe-t-il un opérateur que je pourrais utiliser dans la fonction agrégat pour obtenir une chaîne au lieu d'ObjectId en réponse?

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

Mongodb 4.0 a introduit $toString opérateur d'agrégation. Donc, maintenant, vous pouvez facilement convertir ObjectId en chaîne

db.collection.aggregate([
  {
    $project: {
      _id: {
        $toString: "$_id"
      }
    }
  }
])

OU vice versa en utilisant $toObjectId agrégation

db.collection.aggregate([
  {
    $project: {
      _id: {
        $toObjectId: "$_id"
      }
    }
  }
])
21
Ashh

Il n'y a pas d'opérateur direct dans la fonction d'agrégation pour obtenir la chaîne de ObjectId.

Après la version 2.6 Vous pouvez utiliser la méthode ObjectId.toString() pour convertir votre ObjectId en chaîne. Vous devez d'abord faire correspondre et projeter votre ObjectID. Ensuite, vous pouvez convertir cet ID d'objet en chaîne à l'aide de ObjectID.toString().

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

Et puis utilisez l'objet résultant et obtenez la chaîne comme réponse en utilisant ObjectID.tostring()

Modifier: vous pouvez accéder à l'attribut str de l'ID d'objet à l'aide de

ObjectId("507f191e810c19729de860ea").str

source: documents mongodb

8
Tamil Arasi