【问题标题】:Update by Id not finding document按 ID 更新未找到文档
【发布时间】:2016-01-23 11:06:31
【问题描述】:

我正在尝试使用 Mongoose 执行一个相对简单的更新:

var location =  locationService.getLocation(typedLat, typedLong, travelRadius);

DocumentModel.update({_id :  passedInId }, { location : location }, function(err, resp){
    next(err, resp);
});

在这种情况下,passedInId 是字符串: "561ee6bbe4b0f25b4aead5c8"

在对象(我创建的测试数据)中,id 是: "_id": ObjectId("561ee6bbe4b0f25b4aead5c8")

但是,当我运行上述代码时,匹配的文档为 0。我认为这是因为 passInId 被视为字符串,但是当我将其键入到 ObjectId 时:

var queryId = ObjectId(passedInId)

结果相同,文档不匹配。我错过了什么?这似乎应该是显而易见的......

【问题讨论】:

  • 将调试标志设置为 true,它不会将查询记录到控制台。

标签: node.js mongodb mongoose


【解决方案1】:

Mongoose 会将字符串正确解释为 ObjectId。必须是以下情况之一:

  • 该记录不在集合中。在 mongo shell 中运行查询以进行检查。

  • Mongoose 我会查看包含您的测试数据的集合以外的集合。请记住,默认情况下,mongo 会将您注册模型的名称小写,并为其添加一个“s”。

    • 最后,您的回答说明了这一点,也许您的模型没有更新任何新信息。

【讨论】:

  • 对象返回 findOne( { _id : ObjectId("561ee6bbe4b0f25b4aead5c8") }) 并且模型和文档集合名称匹配。围绕同一模型的其他方法一直在起作用。
【解决方案2】:

这种行为是因为我还没有更新 mongoose 中的模型以包含 location 元素。没有错误,它只是不匹配或不做任何事情。

【讨论】:

    猜你喜欢
    • 2017-11-27
    • 1970-01-01
    • 2018-06-01
    • 2016-07-30
    • 1970-01-01
    • 2018-06-19
    • 2019-08-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多