如何在聚合操作中使用“_id”?

4
我正在尝试获取类似这样的值:name_5ab9c3da31c2ab715d421285。
db.getCollection('name').aggregate([
      { 
          $project: 
          {
              newValue: { $concat: [  "name", "_", "$_id" ]} 
          }
    }
  ])

我遇到了这个错误:$concat仅支持字符串,不支持objectId。

我尝试将 "$_id" 更改为 ObjectId("$_id").str ,但仍然出现相同的错误。我正在使用mongo 3.6,因此无法使用$toString。 有什么好的解决方法吗?


你想解决什么问题?你想在哪里使用 newValue - mbuechmann
我有一些命名为这样的集合。 - LagSurfer
抱歉,但那并没有回答我的问题... - mbuechmann
使用 ObjectId("507c7f79bcf86cd7994f6c0e").valueOf() 来获取 507c7f79bcf86cd7994f6c0e。请参阅 https://docs.mongodb.com/manual/reference/method/ObjectId.valueOf/。 - rodrigoap
2个回答

3

MongoDB 4.0引入了$toString功能。

使用方法(针对您的情况)

db.getCollection('name').aggregate([
      { 
          $project: 
          {
              _id: {
                  $toString: "$_id"
              }
              newValue: { $concat: [  "name", "_", "$_id" ]}
          }
    }
  ])

enter image description here


它会返回请求的ObjectId("5ab9c3da31c2ab715d421285")还是只返回id 5ab9c3da31c2ab715d421285 - rodrigoap
1
只返回翻译后的文本字符串。 - Syed Kashan Ali

1

几乎正确... ObjectId.valueOf() 似乎是正确的答案。 - rodrigoap

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接