在MongoDB中添加额外的信息 – API RESTfull

我正在创build一个动物数据库。 对于我存储在我的数据库信息中的每个产品,如下所示:

{ "_id": ObjectId("55489125dadf65e30969d6d3"), "codAnimal": "100001", "animalData": { "EN": { "name": "Monkey", "description": "The monkey lives in the jungle" } } } 

然后我想添加额外的信息在同一个动物,但在另一种语言,使用标签,这样的事情,我想补充每种语言:

  "ES": { "name": "Mono", "description": "El mono vive en la selva" } 

结果应该是这样的:

 { "_id": ObjectId("55489125dadf65e30969d6d3"), "codAnimal": "100001", "animalData": { "EN": { "name": "Monkey", "description": "The monkey lives in the jungle" }, "ES": { "name": "Mono", "description": "El mono vive en la selva" } } } 

但是我不知道我能做什么,我不知道这是否可能。 我正在使用RESTfull API Nodo.js和Angularjs。

你可以使用$set操作符来更新

 var query = { "_id": ObjectId("55489125dadf65e30969d6d3"), "codAnimal": "100001" }, update = { "$set": { "animalData.ES": { "name": "Mono", "description": "El mono vive en la selva" } } }; db.collection.update(query, update, {"upsert": true}); 

更新 – (未经testing)

要通过RESTful API发送此数据,您可能需要考虑更改文档模式,以便animalData信息成为embedded式子文档,这将更容易查询

 { "_id": ObjectId("55489125dadf65e30969d6d3"), "codAnimal": "100001", "animalData": [ { "language_id": "EN", "name": "Monkey", "description": "The monkey lives in the jungle" }, { "language_id": "ES", "name": "Mono", "description": "El mono vive en la selva" } ] } 

你的server.js文件基本上应该有这样的设置,你需要用Mongoose定义数据库模式。 模式只是MongoDB中数据的表示。 这是你可以强制某个领域具有特定types的地方。 字段也可以是必需的,唯一的,只包含某些字符:

 // server.js var express = require("express"), mongoose = require("mongoose"), _ = require('lodash'); mongoose.connect('mongodb://localhost/test') // This connects to a MongoDB db called test var animalSchema = { "codAnimal": String, "animalData": [{ "language_id": String, "name": String, "description": String }] } var Animal = mongoose.model('Animal', animalSchema, 'animal') var app = express(); /** * Update animal details */ app.put('/api/animals/:id', function (req, res){ var animal = req.animal; animal = _.extend(animal, req.body); animal.update({ _id: animal.id }, { "$addToSet": { "animalData": { "language_id": req.body.lang, "name": req.body.name, "description": req.body.description } } }, function(err) { if (err) { return res.send(400, { message: getErrorMessage(err) }); } else { res.jsonp(animal); } }); }); app.listen(3000); 

以上只是API放置操作的一般准系统结构。 networking上有大量的教程提供了关于设置MEAN栈应用程序的深入代码,其中包括可以使用Node.js,Express和MongoDB查看第一个API, 使用AngularJS创build电视节目跟踪器,Node.js和MongoDB使用Express和MongoDBMEAN.JS 编写待办事项列表 – 使用MongoDB,Express,AngularJS和Node.js的完整堆栈JavaScript