Mongodb 使用Mongo的Sails中的本机更新不适用于ObjectId

Mongodb 使用Mongo的Sails中的本机更新不适用于ObjectId,mongodb,sails.js,objectid,Mongodb,Sails.js,Objectid,我不知道我做错了什么 我使用Sailsv0.10和mongo2.6.0,希望通过native更新集合中的数组字段(使用$push) 我的模型: module.exports = { schema: true, attributes: { username: { type: 'string', required: true }, pubs: { type: 'array', defaultsTo: [] }, ... 我的职能: U

我不知道我做错了什么

我使用Sailsv0.10和mongo2.6.0,希望通过native更新集合中的数组字段(使用$push)

我的模型:

module.exports = {

schema: true,
attributes: {

  username: {
    type: 'string',
    required: true
  },
  pubs: {
    type: 'array',
    defaultsTo: []
  },
  ...
我的职能:

    User.native(function (err, collection) {
      collection.update({username:aUsernameVariable},{$push:{pubs:aPubsVariable}}, function (err) {
    });
到目前为止,它是有效的。但是为什么它不能作为id字段的查询工作呢

    User.native(function (err, collection) {
      collection.update({id:anIdVariable},{$push:{pubs:aPubsVariable}}, function (err) {
    });
我明确地为查询使用正确的id来测试它

我做错了什么?或者这是Sails Mongo适配器的ObjectId类型转换问题

如果您想使用native(),则始终可以直接在Mongo DB中尝试相同的查询。因为_id是一个对象id,所以您应该

var ObjectId = require('mongodb').ObjectID;

 User.native(function (err, collection) {
  collection.update({_id: new ObjectId(anIdVariable)},{$push:{pubs:aPubsVariable}}, function (err) {
});

如果您使用sailsjs,您可以使用npm install mongodb--save将mongo本机驱动程序添加到应用程序中,然后:

ObjectID = require('sails-mongo/node_modules/mongodb').ObjectID;
var o_id = new ObjectID(req.param('id'));
console.log(o_id );
:)


rhernandez@itemsoft.mx问题在于,在mongo关系字段中,数据存储为字符串,但应为ObjectID,例如
ObjectID(“56309f327dc5a4133c54bd5e”)
。我尝试在
beforeCreate()函数中生成ObjectID

beforeCreate: function(values, cb) {
    var ObjectID = require('mongodb').ObjectID;
    values.owner = ObjectID(values.owner);
    cb();
}
但它抛出了一个错误“传入的参数必须是一个12字节的字符串或一个24个十六进制字符的字符串new ObjectId”。 我有0.11.2的帆。然后我尝试更新,这对我很有帮助。所以,请检查您的sails mongo版本。不要忘记从beforeCreate()中删除手动生成ObjectID,它将自行处理

beforeCreate: function(values, cb) {

    cb();
}

谢谢你的回答。如果您是指使用MongoShell的方式“直接在MongoDB中查询”,那么我会说我希望从Sails控制器执行该命令。在Sails中,对象ID类型未知。Id在正常的Sails函数中进行内部转换,但在本机更新中显然没有。在本机中也可以找到,但在本机更新中不行。哦,对不起,我忘了添加mongodatabase驱动程序。我更新了我的解决方案!非常感谢你!使用“var ObjectId…”而不是“var ObjectId…”可以完美地工作。我想这可以节省一些索引。因为我是一个noob,这样做有什么缺点吗?这应该是可以接受的答案,因为它使用内置的依赖工具