【发布时间】:2017-08-28 23:17:09
【问题描述】:
我是一个相当新的开发人员,试图在 API Endpoints 的帮助下使用 NodeJS、MongoDB 和 Mongoose 开发一个简单的 CRUD 应用程序。使用 Mongoose 驱动程序的 findOneAndUpdate 方法更新文档时,我没有得到正确的结果。
集合是在 mongoimport 命令的帮助下通过导入 CSV 文件形成的。考虑到我有以下文档。
{
"_id" : ObjectId("599c8da6b18e3117b09ea299"),
"MetaKey" : "lastWPSyncedStatus",
"MetaValue" : "Running"
}
这里的 MetaKey 是 lastWPSyncedStatus,其对应的值是 Running。
我需要做的就是当“/test/client”端点被命中时,我想将 lastWPSyncedStatus 更新为 STOP。该 URL 使用 PUT HTTP 方法提交以进行更新。
RosterOptions.findOneAndUpdate(
{
'MetaKey' : 'lastWPSyncedStatus'
},
{
$set:
{
'MetaValue': 'STOP'
}
},
{
new: true
},
function(err,data){
if(err){
res.send(err);
}
res.json(data);
// console.log(data);
}
)
我正在尝试将 MetaKey 为“lastWPSyncedStatus”的文档的 MetaValue 更新为“STOP”。我尝试在 nodejs 中提交查询,它返回没有任何错误,但 mongodb 没有更新。此外,当我为 mongoose 设置调试时,以下查询将提交给 mongoose。
Mongoose: rosterOptions.findOne({ MetaKey: 'lastWPSyncedStatus' }, { new: true, fields: {} })
输出是:
{
"_id": "599c8da6b18e3117b09ea299",
"MetaKey": "lastWPSyncedStatus",
"MetaValue": "Running"
}
我无法确定问题所在。我也尝试使用更新方法,但得到以下输出。
{
"ok": 0,
"n": 0,
"nModified": 0
}
当我尝试在 mongodb 中运行函数 update() 时,我的文档已正确更新。
我参考了mongoose documentation 并尝试以类似的方式实现它。如果有人能指导我解决问题,我会很高兴。
【问题讨论】:
-
你能分享
RosterOptions集合的Mongoose Schema吗? -
嘿,@ryder 我已经正确解决了这个问题。我在正确定义架构时犯了一个错误,因此我遇到了这个问题。感谢您的快速回复。
标签: mongoose