_id 找不到带有 Mongo 的 Sails.js

Posted

技术标签:

【中文标题】_id 找不到带有 Mongo 的 Sails.js【英文标题】:Sails.js with Mongo can't find by _id 【发布时间】:2016-07-22 18:42:13 【问题描述】:

我正在尝试使用集合的 _id 在 Mongo 上查找记录。我传递了 _id,我尝试过作为 String 和 ObjectId,但没有人工作。奇怪的是,使用 findOne 它返回一个完全不同的记录,具有不同的 _id。如果我只使用 find 和 where 获取所有记录,它根本不会过滤任何内容。

如果我使用另一个字段进行搜索,那么它可以工作并获得正确的记录,但我想使用 _id 字段进行搜索。这是我迄今为止尝试过的:

MyModel.findOne(where: _id: new    ObjectId("57926086e2a4ff010eeb8c83")).exec(function (err, record)
  //record completely different
);

MyModel.findOne(where: _id:"57926086e2a4ff010eeb8c83").exec(function (err, record)
  //record completely different
);

MyModel.findOne(id: new    ObjectId("57926086e2a4ff010eeb8c83")).exec(function (err, record)
  //record completely different
);

MyModel.findOne(id:"57926086e2a4ff010eeb8c83").exec(function (err, record)
  //record completely different
);

那么,我做错了什么?,我想不通。我知道(认为)我可以使用“native”来做到这一点,但这是唯一的方法吗???

谢谢!

【问题讨论】:

你是在使用 Mongoose,还是在使用 Waterline? @robertklep Hummm,我怎么知道?在 connection.js 中,我刚刚使用适配器sails-mongo 配置了部分someMongodbServer。 在这种情况下,我认为您正在使用 Waterline(我没有任何经验)。 mongoose 标签让我很困惑,因此提出了这个问题。 您好,我也面临同样的问题,能否请您分享 MyModel 属性并更正 findOne 查询 【参考方案1】:

根据我对我们的sails.js 应用程序的经验,只有您的最后一个选项应该有效。

使用sails.js 和Waterline 时,您必须使用id 而不是_id(您的最后一个选项)。 通过 Waterline 使用 MongoDB 本地调用时,您必须使用 _idnew ObjectId()(第一个选项中的查询参数)。

【讨论】:

是的,这很奇怪,但在您发布后再次尝试了我的最后一个选项,并且成功了!所以不知道之前发生了什么没有用......无论如何,它现在可以使用,并且使用最后一个选项:) 感谢您为我指明正确的方向!

以上是关于_id 找不到带有 Mongo 的 Sails.js的主要内容,如果未能解决你的问题,请参考以下文章

带有嵌入式类型查询的 Mongo/DataNucleus/JPA 给出:找不到(部分)的类型...因为符号没有类型;隐式变量?

BSON::ObjectId 与 Mongo::ObjectID

BSON::ObjectId 与 Mongo::ObjectID

可编辑表单 ActiveRecord::RecordNotFound(找不到带有 'id'=undefined 的视频)

Angular:找不到带有路径的控件:'variable-> 0 -> id'

通过 Meteor / Mongo 返回子文档数组