使用猫鼬在输出中创建新字段

时间:2018-08-31 04:02:01

标签: mongoose mongoose-schema

我有一个简单的mongodb

{
    "name" :"rajesh",
    "age" : 38
},
{
    "name" :"vijay",
    "age" : 27
}

我希望我的猫鼬输出中有这样的

{
    "name" :"rajesh",
    "age" : 38,
    "temp" : "rajesh_38"
},
{
    "name" :"vijay",
    "age" : 27,
    "temp" : "vijay_27"
}


schema.find(findObj)
    .select({allExistingFields+newField})

请帮助。

2 个答案:

答案 0 :(得分:1)

您可以使用$addFields / $concat$toString对MongoDB进行类似的操作:

db.collection.aggregate([
  {
    $addFields: {
      "temp": {
        $concat: [
          "$name",
          "_",
          {
            $toString: "$age"
          }
        ]
      }
    }
  },
  {
    $project: {
      _id: 0
    }
  }
])

您可以see it here

注意:由于使用了$toString

,因此它依赖于MongoDB版本 4.0

您可以尝试通过以下方式对猫鼬进行操作:

Model.aggregate([
  {
    $addFields: {
      "temp": {
        $concat: [
          "$name",
          "_",
          {
            $toString: "$age"
          }
        ]
      }
    }
  },
  {
    $project: {
      _id: 0
    }
  }
])

答案 1 :(得分:1)

虽然这样做是正确的方法,但是如果要在许多查询中使用此temp字段,则可能需要考虑使用它在您的模式上创建虚拟对象,例如:

const personSchema = new Schema({
    name: "String",
    age: "Number"
});

personSchema.virtual('temp').get(() => {
    return `${this.name}_${this.age}`
});