我正在用它做一个upsert:
Articles.update(
{ title: title },
{
title: title,
parent: type
},
{ upsert: true },
function(res) {
return console.log(res);
}
);
console.log(needToGetID);
现在我需要获取已更新或插入的文档的_id。我以为我可以通过回调得到它,但res
未定义。
我假设只有一个由查询定义的唯一文档。
更新
忘记提到我正在使用流星......
答案 0 :(得分:6)
.update()
的目的是基本上只是"更新"匹配的文件(因为"多"也可以在这里应用)并且完成它,因此特别考虑到这个"可以"应用于多个文档然后返回此类信息在该操作方面没有任何意义。
但是,如果您打算修改单个"特定文档",假设您使用的是猫鼬,那么.findOneAndUpdate()
方法将适用:
Articles.findOneAndUpdate(
{ title: title },
{
title: title,
parent: type
},
{ upsert: true, new: true },
function(res) {
return console.log(res);
}
);
另请注意new: true
这很重要,因为没有它,默认行为是返回文档"之前"它被声明修改了。
无论如何,由于此处的返回是匹配和修改的文档,因此响应中会出现_id
和任何其他值。
使用meteor,您可以添加plugin以启用.findAndModify()
这是根方法:
meteor add fongandrew:find-and-modify
然后在代码中:
Articles.findAndModify(
{
"query": { title: title },
"update": {
title: title,
parent: type
},
"upsert": true,
"new": true
},
function(res) {
return console.log(res);
}
);
请注意,您也应该真正使用$set
运算符,因为没有它,基本上更改"覆盖"目标文件:
Articles.findAndModify(
{
"query": { "title": title },
"update": {
"$set": {
"parent": type
}
},
"upsert": true,
"new": true
},
function(res) {
return console.log(res);
}
);