如何在不包含所有属性的情况下返回json中的子集合(或对象)

时间:2015-01-28 10:09:42

标签: json node.js mongoose

我使用mongoose作为JSON Schemanode.js。不用说,我对两者都不熟悉。我一直在苦苦挣扎,让这件事对我有用,但无法做到。最后,唯一的解决方案是从这里的一些真正的好人那里得到帮助。

这是我的架构定义 -

UserName = {    
        "properties": {
            userURL: {
                    "description": "URL of this resource",
                        "type": "string"
                },
            userName : {
                    "description": "UserName",
                    "type": "string",
                    "required": true
                },
        }
}

当我对它进行调用时,它会以下列格式返回响应 -

[
  {
    "_id": "54c5ede55c82c4bd6abee50a",
    "__v": 0,
    "properties": {
    "userURL": "http://localhost:3000/54c1d6ae441ae900151a6520",
    "userName ": "testUser"
    }
  }
]

现在我的要求是以下列格式返回响应 -

[
  {
    "_id": "54c5ede55c82c4bd6abee50a",
    "userURL": "http://localhost:3000/54c1d6ae441ae900151a6520",
    "userName ": "testUser"
  }
]

即没有版本和属性标签。我能够使用以下代码逃脱版本,但属性似乎是棘手的事情 -

 .get(function(request, response) {
        UserSchemaModel.find().select('properties.userURL properties.userName').exec (function (err, resObj) {
            if (err)
                response.send(err);
            else{           
                response.json(resObj);
            }
        });
    });

但它仍然有属性字段:( -

[
 {
    "_id": "54c5ede55c82c4bd6abee50a",
    "properties": {
    "userURL": "http://localhost:3000/54c1d6ae441ae900151a6520",
    "userName ": "testUser"
    }
 }
]

我在猫鼬周围select asalias name in selectpopulation做了一些谷歌,但没有运气。

请建议。最诚挚的问候。

1 个答案:

答案 0 :(得分:0)

只需制作一个新对象

response.json(
              {
               "_id":     resObj["_id"], 
               "userURL": resObj["properties"]["userUrl"], 
               "userName": resObj["properties"]["userName"]
              }
           );

更新:由于resObj是一个数组(根据您的评论),您可以使用Array.prototype.map()将其转换为正确的格式,如下所示:

response.json( resObj.map(function(o){
                 return {
                          "_id":      o["_id"], 
                          "userURL":  o["properties"]["userUrl"], 
                          "userName": o["properties"]["userName"]
                        };
                    }) 
                 );

这将返回一个转换对象列表,然后将其传递给response.json()方法。