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

use*_*805 4 mongodb objectid sails.js

我不知道我做错了什么.

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

我的模特:

module.exports = {

schema: true,
attributes: {

  username: {
    type: 'string',
    required: true
  },
  pubs: {
    type: 'array',
    defaultsTo: []
  },
  ...
Run Code Online (Sandbox Code Playgroud)

我的功能:

    User.native(function (err, collection) {
      collection.update({username:aUsernameVariable},{$push:{pubs:aPubsVariable}}, function (err) {
    });
Run Code Online (Sandbox Code Playgroud)

它到目前为止工作.但是为什么这不能用作id字段的查询?

    User.native(function (err, collection) {
      collection.update({id:anIdVariable},{$push:{pubs:aPubsVariable}}, function (err) {
    });
Run Code Online (Sandbox Code Playgroud)

我肯定使用正确的id来查询它.

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

mdu*_*sch 11

如果您想使用native(),您可以直接在mongo-DB中尝试相同的查询.因为_id是一个Object-id,你应该这样做

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

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

您可以将mongo-native-driver添加到您的应用程序中 npm install mongodb --save


小智 10

如果你使用sailsjs然后:

ObjectID = require('sails-mongo/node_modules/mongodb').ObjectID;
var o_id = new ObjectID(req.param('id'));
console.log(o_id );
Run Code Online (Sandbox Code Playgroud)

:)

rhernandez@itemsoft.mx