mongoDB - 更新查询将数组文档添加到现有文档

时间:2014-05-25 15:30:28

标签: node.js express mongoskin

userlist集合包含以下格式的文档。

{
        "_id" : ObjectId("5381d32ce72cc794166eede2"),
        "name" : "Haseeb",
        "password" : "dgkhan",
        "email" : "hasseeb@yahoo.com",
        "address" : "237 D, Faisal Town , Lahore",
        "phone" : "5162806"
}

我打算在现有文档中添加另一个成员,以便生成的文档看起来像这样。

{
            "_id" : ObjectId("5381d32ce72cc794166eede2"),
            "name" : "Haseeb",
            "password" : "dgkhan",
            "email" : "hasseeb@yahoo.com",
            "address" : "237 D, Faisal Town , Lahore",
            "phone" : "5162806",
            "purchases" : [{
                "itemID": xyz,
                "quantity": 142
            },
            {
                "itemID": kjh,
                "quantity": 987
            }
            }]

}

为此,我编写了以下mongoskin查询,但它没有执行任何更新。

db.collection('userlist').update(
                {_id:req.session._id},
                 {
                    '$push': { purchases: {
                        itemID: item.ID,
                        quantity: item.quantity
                    }
                }
            }, function(err) {
                if (err) throw err;
                    console.log('Updated!');
            });
        }

req.session._id = 5381d32ce72cc794166eede2的值,即我的集合中docuemnt的有效_id字段,而item.ID和item.quantity也是有效的字符串。 任何帮助都会非常感激。

3 个答案:

答案 0 :(得分:2)

我对Mongoose比较熟悉,但是看看你可以使用的docs

collection.updateById(req.session._id, ...)

collection.update({_id: toObjectID(req.session_id)}, ...)

答案 1 :(得分:0)

我认为你应该使用$ set而不是$ push。

此特定问题的一个很好的资源是:http://docs.mongodb.org/manual/reference/method/db.collection.update/#db.collection.update

答案 2 :(得分:0)

像这样的东西。您需要包含$ each语法。

db.collection('userlist').update(
                {_id:req.session._id},
                 {
                    $push { purchases: { $each: {
                        itemID: item.ID,
                        quantity: item.quantity
                        }
                    }
                }
            }, function(err) {
                if (err) throw err;
                    console.log('Updated!');
            });
    }