REST使用Node.js和Mongoose

时间:2017-01-20 23:37:35

标签: node.js mongodb rest mongoose

我一直在关注创建RESTful API的Youtube教程(我刚刚掌握了这个领域)。该教程是关于书籍的,但我想扩展它以支持geoJSON,因为这是我的最终目标。

如果字段位于文档的根目录下,我可以更新字段,例如:

first_name: object.first_name,

我不明白的是如何更新作为子文档的一部分存在的字段:

geometry: { coordinates: [] },

我尝试过使用geometry.coordinates和上面的结构,其中有一些已经有效。

这就是我所拥有的:

从对象模型更新功能

// Update Object
module.exports.updateObject = function(id, object, options, callback)
{
    var query = { _id: id};
    var update = {
            geometry:
            {
                type: object.geometry.type,
                coordinates: object.geometry.coordinates
            },
            properties:
            {
                icon: object.properties.icon,
                title: object.properties.title,
                description: object.properties.description
            }

    }
    User.findOneAndUpdate(query, update, options, callback);
};

app app来自app.js

app.put('/api/objects/:_id', function(req, res)
{
    var id = req.params._id
    var object = req.body;

    Object.updateObject(id, object, {}, function(err, object)
    {
        if (err)
        {
            res.json(err);
        } 

        res.json(object);
    });
}); 

来自网络的PUT请求

{
    "geometry": 
    {
        "type": "Point",
        "coordinates": [-90.5299938027191,                  24.42859997065679]
    },
    "properties":
    {
        "icon": "bar-15",
        "title": "Bar",
        "description": "A Bar"
     }    
}

HTTP响应

200 OK
Date: Fri, 20 Jan 2017 23:24:58 GMT
ETag: W/"4-N6YlnMDB2uKZp4Zkid/wvQ"
Connection: keep-alive
X-Powered-By: Express
Content-Length: 4
Content-Type: application/json; charset=utf-8
null

示例mongo对象

{
   "_id": ObjectId("58815cd0110dcc3b1e51d411"),
   "geometry": {
     "type": "Point",
     "coordinates": [
       -82.52920651436,
       49.428099941567 
    ] 
  },
   "properties": {
     "icon": "bar-15",
     "title": "Bar",
     "description": "A Bar",
     "date": ISODate("2017-01-20T00:41:52.830Z") 
  },
   "__v": NumberInt(0) 
}

2 个答案:

答案 0 :(得分:0)

您可以使用UserNotificationTrigger更新非根字段

$set

答案 1 :(得分:0)

发现问题:

我从我的代码的另一部分C + P'd代码,但没有注意到我没有更新以下行:

User.findOneAndUpdate(query, update, options, callback);

为:

Object.findOneAndUpdate(query, update, options, callback);