我正在研究MEAN应用程序(Angular2 +)。我想为每个用户维护一个单独的数据。截至目前,数据就像任何人都可以查看任何细节,但我想要,如果我登录并输入详细信息,只有我可以查看这些详细信息。基本上我想将用户集合与其他集合相关联。由于我是Mongo的新手,我对此一无所知。
user.ts
import * as mongoose from 'mongoose'
const userSchema = new mongoose.Schema({
username: String,
email: { type: String, unique: true, lowercase: true, trim: true },
password: String,
role: String
});
cat.ts
import * as mongoose from 'mongoose';
const catSchema = new mongoose.Schema({
name : String,
height: String,
weight: String,
});
我不知道这是什么
base.ts
abstract class BaseCtrl {
abstract model: any;
// Get all
getAll = (req, res) => {
this.model.find({}, (err, docs) => {
if (err) { return console.error(err); }
res.json(docs);
});
}
// Count all
count = (req, res) => {
this.model.count((err, count) => {
if (err) { return console.error(err); }
res.json(count);
});
}
// Insert
insert = (req, res) => {
const obj = new this.model(req.body);
obj.save((err, item) => {
// 11000 is the code for duplicate key error
if (err && err.code === 11000) {
res.sendStatus(400);
}
if (err) {
return console.error(err);
}
res.status(200).json(item);
});
}
// Get by id
get = (req, res) => {
this.model.findOne({ _id: 'req.params.id '}, (err, obj) => {
if (err) { return console.error(err); }
res.json(obj);
});
}
// Update by id
update = (req, res) => {
this.model.findOneAndUpdate({ _id: req.params.id }, req.body, (err) => {
if (err) { return console.error(err); }
res.sendStatus(200);
});
}
// Delete by id
delete = (req, res) => {
this.model.findOneAndRemove({ _id: req.params.id }, (err) => {
if (err) { return console.error(err); }
res.sendStatus(200);
});
}
}
export default BaseCtrl;
答案 0 :(得分:0)
您需要将user_id字段添加到catSchema。 user_id将是添加/保存该猫的用户的参考。
cat.ts
import * as mongoose from 'mongoose';
const catSchema = new mongoose.Schema({
name : String,
height: String,
weight: String,
user_id: String, // Or may be ObjectId
});
您需要从用户集合中查询用户以便每次都检索数据。
或者您可以使用mongodb的DBRef。要在mongoose中实现此功能,您可以关注this链接。
基本上你的猫模型将是
cat.ts
import * as mongoose from 'mongoose';
const catSchema = new mongoose.Schema({
name : String,
height: String,
weight: String,
user: { type: mongoose.Schema.ObjectId, ref: 'User' }
});
要插入cat,请从登录详细信息/会话中获取用户ID并添加到集合。
对于您来说,您需要将“user”字段添加到req.body,就像在您从req.body创建模型的基本控制器中一样。 如果您不想添加到req.body,则可以覆盖cat控制器的insert方法,并使用userid手动创建cat模型。
控制器/ cat.ts
import Cat from '../models/cat';
import BaseCtrl from './base';
export default class CatCtrl extends BaseCtrl {
model = Cat;
insert = (req, res) => {
const data = {
title: req.body.title,
height: req.body.height,
weight: req.body.weight,
user: getUser() // Get the logged in userid
};
const obj = new this.model(data);
obj.save((err, item) => {
if (err && err.code === 11000) {
res.sendStatus(400);
}
if (err) {
return console.error(err);
}
res.status(200).json(item);
})
}
}
如上所述,您可以根据用户修改和过滤所有文档。
修改强>: 为简单起见,请在表单中发送当前登录的用户。 cats.component.ts
addCat() {
this.addCatForm.value.userid = this.authService.currentUser._id; // You might need to use callback here
... // All other code
}
将cat控制器恢复为原样。