如何使用猫鼬在返回结果中创建新字段并根据条件在其中设置值?

问题描述

我有一个名为“动物”的MongoBD收藏

    [
        {
            _id:ObjectId("5f3ecddd7fe1af0c68614605"),status: "wild",name: "Wolf"
        },{
            _id:ObjectId("5f3ecddd7fe1af0c68614606"),status: "domestic",name: "Dog"
        },{
            _id:ObjectId("5f3ecddd7fe1af0c68614607"),name: "Pussy Cat"
        },{
            _id:ObjectId("5f3ecddd7fe1af0c68614608"),name: "Lion"
        },{
            _id:ObjectId("5f3ecddd7fe1af0c68614609"),name: "Snake"
        }
    ]

我想使用猫鼬中的聚合管道查询该集合,并返回一个带有新字段的结果,该字段根据文档中的status字段对它们进行分类。例如,具有status: "wild"的文档将获得新字段new_field: "Tough Forest Animal"

然后,具有status: "domestic"的文档将获得新字段new_field: "Friendly Neighborhood Animal"

我想要看起来像这样的结果

[
    {
        _id: "5f3ecddd7fe1af0c68614605",name: "Wolf",new_field: "Tough Forest Animal"
    },{
        _id: "5f3ecddd7fe1af0c68614606",name: "Dog",new_field: "Friendly Neighborhood Animal"
    },{
        _id: "5f3ecddd7fe1af0c68614607",name: "Pussy Cat",{
        _id: "5f3ecddd7fe1af0c68614608",name: "Lion",{
        _id: "5f3ecddd7fe1af0c68614609",name: "Snake",new_field: "Tough Forest Animal"
    }
]

给予我的所有帮助深表感谢。谢谢

解决方法

我终于放弃了。使用switch语句

AnimalsModel.aggregate([
    {
        $project: {

            "_id": 1,"status": 1,"name": 1,"new_field": {
                "$switch": {
                    "branches": [
                        { "case": { "$eq": [ "$status","wild" ] },"then": 'Tough Forest Animal' },{ "case": { "$eq": [ "$status","domestic" ] },"then": 'Friendly Neighborhood Animal' },],"default": 'None of the above'
                }
            }
        }
    }
],function (error,animals) {
    console.log(animals)
});