我使用mongoose在基于节点的Web应用程序中使用以下架构。
var headerSchema = new mongoose.Schema({
name: String,
values: String,
state: String
});
var responseSchema = new mongoose.Schema({
name: String,
responseText: String,
active: String
});
var requestSchema = mongoose.Schema({
id: String,
name: String,
description: { type: String },
url: String,
verb: String,
createdAt: { type: Date, default: Date.now },
headers: [headerSchema],
body: String,
responses: [responseSchema]
});
请求模式是作为mongo数据库中的集合存储的模式,并且标头模式和响应模式是它的子集合。
我面临的问题是了解如何更新请求架构文档,添加,更新以及从其中一个子集合中删除项目的最佳方法是什么,例如responseSchema。
我对mongo相当新,并且未能找到一个明确的例子,说明如何才能最好地实现这一目标。
非常感谢提前
答案 0 :(得分:1)
我首先假设您使用以下内容构建了一个模型:
var request = mongoose.model( 'request', requestSchema );
当你的模型可用时,Mongoose提供了一些辅助方法来处理子文档。首先,请注意,当您创建子文档时,Mongoose会自动为其分配唯一的_id
标识符。您需要知道这是为了更新或删除给定的子文档。
下面的简单示例概述了主要方法。这假设您知道:
requestID
- 请求的唯一_id
headerID
- 标题子文档的唯一_id
request.findById( requestID,
function (err, request) {
if(!err){
// 1: Add a new header
request.headers.push({
name: "My header name"
});
// 2: Modify a specific header
var thisHeader = request.headers.id(headerID);
request.headers.nam = "My header name";
// 3: Delete a specific header
var thisHeader = request.headers.remove(headerID);
request.save(function (err, request){
if(!err){
console.log('request saved: ' + request);
}
});
}
}
);