UpdateOne不修改MongoDB中的子文档

时间:2017-07-16 23:54:13

标签: node.js mongodb

我有一个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_idf_id字段的实际值。

我还完成了db.collection.find({})命令,其中包含了片段内部使用的两个值,并正确返回了文档。

0 个答案:

没有答案