I wonder what I am doing wrong.
I use Sailsv0.10 and mongo2.6.0 and want to update an array field (using $push) in a collection via native.
My model:
if you use sailsjs then:
ObjectID = require('sails-mongo/node_modules/mongodb').ObjectID;
var o_id = new ObjectID(req.param('id'));
console.log(o_id );
:)
rhernandez@itemsoft.mx
The problem is because, in mongo relation field, data stores as string - but should be as ObjectID, e.g. ObjectID("56309f327dc5a4133c54bd5e")
. I've tried to generate ObjectID in beforeCreate()
function
beforeCreate: function(values, cb) {
var ObjectID = require('mongodb').ObjectID;
values.owner = ObjectID(values.owner);
cb();
}
But it throw an error "Argument passed in must be a single String of 12 bytes or a string of 24 hex characters new ObjectId". I had sails-mongo 0.11.2. Then I'v tried to update - and it helped to me. So check your sails-mongo version. Do not forget to remove manual generating ObjectID from beforeCreate() it will deals by itself
beforeCreate: function(values, cb) {
cb();
}
If you want to use native() you can always try the same query directly in your mongo-DB. Because _id is a Object-id you should
var ObjectId = require('mongodb').ObjectID;
User.native(function (err, collection) {
collection.update({_id: new ObjectId(anIdVariable)},{$push:{pubs:aPubsVariable}}, function (err) {
});
You can add the mongo-native-driver to you app with npm install mongodb --save