我有一个mongodb文档结构,如下所示:
文档结构:
{
"_id": ObjectID(59628aa0a6f87f2b68a4636a),
"name": "persons name",
"username": "persons username",
"password": "hashed password",
"formulas": [
{
"f_id": ObjectID(596bfdd758296f208859b9a8),
"name": "formula name",
"amount": "500",
"description": "a description",
"ingredients": [{...}, {...},...,]
}
]
}
我的快递应用中有一个页面,允许人们更新存储在formulas
数组中的公式中的信息。
当我提交post
请求以更新修改后的子文档时,集合中没有任何更改。
此功能的代码在NodeJS中:
示例代码:
router.post('/formula-list/:id', function(req, res){
var db = req.db.collection('users');
var f_id = new ObjectID(req.params.id);
var id = new ObjectID(req.user.id);
var formula = data;
db.updateOne({"_id": id, "formulas.f_id": f_id}, { $set: {
"formulas.$.name": req.body.name,
"formulas.$.description": req.body.description,
"formulas.$.formula": formula
}}, function(err, r){
assert.equal(null, err);
assert.equal(1, r.matchedCount);
assert.equal(1, r.modifiedCount);
req.db.close();
});
data.length = 0;
});
我要做的是通过其f_id
抓取子文档,以便我可以更改该特定子文档的信息,但这显然不起作用。
修改
我意识到我的原始问题是由于我更改了AJAX请求,我的POST
请求实际上并没有命中我的服务器,但现在的问题是此查询不会更新预期的子文档。
根据评论请求,我添加了ObjectID_id
和f_id
字段的实际值。
我还完成了db.collection.find({})
命令,其中包含了片段内部使用的两个值,并正确返回了文档。