我必须承认我并不完全确定mongodbclient函数更新内部的内容。在我的代码中,我目前有这个:
app.post('/update', function(req, res) {
const params = req.body;
const newData = {
id: params.id,
data: params.data
a ton more fields will go here
};
db.collection('datas').update({id : params.id},
{ $set: {data : newData.data}}, (err, data) => {
if (!err) {
res.send({err: false});
} else {
res.send({err: true});
}
});
但是,我不知道整个$ set括号正在做什么,或者如果输入数据上有更多字段,我怎么能修改它来覆盖整个文档。我想id字段真的不需要更新,但你可以得到这个想法。
支架在做什么?我如何根据自己的需求进行定制?
答案 0 :(得分:0)
$ set需要哈希值。 newData已经是一个哈希,它是你需要的哈希,所以试试:
$set: newData
而不是
$set: {data: newData.data}
它应该有用。
答案 1 :(得分:0)
如果您想覆盖整个文档,可以删除$ set标记。
$ set只需设置您传入的字段即可。 如果你没有传递$ set或$ unset命令,它会假设你试图覆盖整个文档。
以下面的文件为例
{
_id: 1,
a: 1,
b: 2,
c: 3
}
使用如下的集合:
db.collection.update(
{_id: 1},
{$set: {
a:2,
b:4,
new: 123
}}
);
将返回以下内容:
{
_id: 1,
a: 2,
b: 4,
c: 3,
new: 123
}
它会更新已传入的a和b,但不会更改c,因为它未在
中传递使用$ unset将删除字段
db.collection.update(
{_id: 1},
{$unset: {
new: true
}}
);
然后会返回:
{
_id: 1,
a: 2
b: 4,
c: 3
}
如果不传入$ set或$ unset,您可以更改整个文档
db.collection.update(
{_id: 1},
{
comment: "what have I done to my data?!?!?!"
}
);
这将返回,保持_id不变,但在过程中覆盖整个文档
{
_id: 1,
comment: "what have I done to my data?!?!?!"
}