搜索一个文档并更新子文档的一些字段
Mongoose - search a document and update some fields of a subdocument
我对Mongoose很陌生,我试图熟悉它,但糟糕的文档没有帮助(没有搜索,没有函数列表,…)。
我有一个代表公司的文档和代表用户的子文档:
{
"_id": "57ffa47f5b70f90831212348",
"name": "mycompany",
"address": "...",
"phone": "...",
"users": [
{
"_id": "57ffa47f5b70f90831212347",
"username": "alpha",
"name": "myname",
"surname": "mysurname",
"password": "..."
}
]
}
我想找到一个特定的子文档和更新只是一些字段(姓名,姓氏,密码,…),从前端传递。
我收到包含已编辑字段(即req.body.name)的req.body
和包含已登录用户的req.user
:
"company_shortname": "CMPNY",
"company_id": "57ffa47f5b70f90831212348",
"user": {
"id_access_level": 0,
"surname": "ltd",
"name": "mycompany",
"username": "mycompanyusername",
"_id": "57ffa47f5b70f90831212347",
"password": "..."
}
}
我想获得的是找到编辑的子文档(包含此子文档的公司将始终与登录的用户相同),更新传递的数据,并保存。
用这个答案,我试了:
Company.find({'_id': req.user.company_id}).select('name').exec(
function(err, company) {
if (err) res.status(500).send(err);
var partialUpdate = req.body;
var set = {};
for (var field in partialUpdate) {
set['users.$.' + field] = partialUpdate[field];
}
company.update({_id: req.user._id, "users._id": req.body._id},
{$set: set},
function(err, numAffected) {
console.log('Number of users edited: ' +JSON.stringify(numAffected,null,4));
});
});
但是我不能让它工作…什么好主意吗?
我用这个查询解决了:
//saving in 'set' the fields to be edited
var partialUpdate = req.body;
var set = {};
for (var field in partialUpdate) {
set['users.$.' + field] = partialUpdate[field];
}
//find the company,then the subdoc, then set the fields with 'set'
Company.findOneAndUpdate({
'_id': req.user.company_id, "users._id" : req.body._id},
{$set: set},
function(err, company) {
//the company status after the update
console.log('company updated: ' +JSON.stringify(company,null,4));
});
相关文章:
- 如何在新的Meteor Collection文档中设置服务器上的created_on字段
- 循环访问文档 (validate_doc_update) 中的 CouchDB 字段
- findAndModify,如何对文档进行操作's数组搜索对象并更改字段值
- 将文档的MongoDB字段合并到一个文档中
- 如何在一个字段中只提取6个值为true的文档
- 可编辑文档中多个字段的本地存储
- 查找包含子对象MongoDb和Node.js的特定字段的文档
- Mongoose创建一个文档,如果找不到指定的字段,则更新文档中的数组
- 仅返回嵌入文档列表中的某些字段
- 在MongoDB和Node.js中查找某个字段具有与对象完全相同元素的文档
- 将多个文档中的字段保存到对象
- 在响应之前向文档添加其他字段
- 如何从MongoDB中选择所有文档,其中一个字段不等于某个值
- MongoDB:按日历周和年聚合文档,并计算一个字段的所有值的总量
- 在MongoDB中,从文档中获取单个字段数组的最简单方法是什么
- 来自 JavaScript 网站的推文输入字段
- CouchDB:访问_design视图或提取文档字段的替代方法是什么
- 为couchdb更新nodejs的nano模块中的文档字段
- 如何$inc MongoDB文档字段与AJAX
- Mongodb /meteor收集检查子文档字段是否存在,当字段是一个变量