2015-08-15 111 views
0

我在這裏找到很多很好的答案像this回答this。但我不能得到它的工作... 我試圖ObjectId("55cf816559d2fc8d0e6c14a8")在查詢的id是。節點JS貓鼬拉查詢

此查詢的工作時robotmongo運行:

db.getCollection('events').update(
    { "_id": ObjectId("55cf816559d2fc8d0e6c14a8") }, 
    { "$pull": { "workers" : { "_id": ObjectId("55cf89ac7cba1d0a10ca86c7")}}}, 
    false, 
    true 
) 

側面說明,什麼是假的,真實的呢?

這裏是我當前的代碼

event.update(
    {'_id': "55cf816559d2fc8d0e6c14a8"}, 
    { "$pull": { "workers" : {_id: "55cf89ac7cba1d0a10ca86c7"}}}, 
    function(err, result) { 
     console.log(err); 
     console.log(result); 
    } 
); 

我沒有得到任何錯誤,結果等於1

回答

1

爲我工作。你必須以不同的,並錯誤地做一些事情:

var async = require('async'), 
    mongoose = require('mongoose'), 
    Schema = mongoose.Schema; 

mongoose.connect('mongodb://localhost/test'); 


var workerSchema = new Schema({ 
    name: String 
}); 

var eventSchema = new Schema({ 
    name: String, 
    workers: [workerSchema] 
}); 


var Event = mongoose.model('Event', eventSchema); 

async.series(
    [ 
    function(callback) { 
     Event.remove({},function(err) { 
     callback(err); 
     }); 
    }, 
    function(callback) { 
     var event = new Event({ 
     _id: "55cf816559d2fc8d0e6c14a8", 
     name: "Great thing" 
     }); 
     event.workers.push({ 
     _id: "55cf89ac7cba1d0a10ca86c7", 
     name: "Worker1" 
     }); 
     event.save(function(err,event) { 
     console.log(event); 
     callback(err); 
     }); 
    }, 
    function(callback) { 
     Event.findOneAndUpdate(
     { "_id": "55cf816559d2fc8d0e6c14a8" }, 
     { "$pull": { "workers": { "_id": "55cf89ac7cba1d0a10ca86c7" } } }, 
     { "new": true }, 
     function(err,event) { 
      console.log(event) 
      callback(err); 
     } 
    ); 
    } 
    ], 
    function(err) { 
    if (err) throw err; 
    mongoose.disconnect(); 
    } 
); 

隨着預期輸出:

{ __v: 0, 
    _id: 55cf816559d2fc8d0e6c14a8, 
    name: 'Great thing', 
    workers: [ { _id: 55cf89ac7cba1d0a10ca86c7, name: 'Worker1' } ] } 
{ _id: 55cf816559d2fc8d0e6c14a8, 
    name: 'Great thing', 
    __v: 0, 
    workers: [] } 
+0

謝謝你,什麼是錯我的代碼?另一個問題「{」new「:true},」這是爲了什麼? –

+0

@KristerJohansson'.findOneAndUpdate()'和類似的方法都將修改匹配的文檔並返回文檔。 「{」new「:true}'修改默認行爲,即在修改之前返回」原始「文檔,而不是返回」修改「文檔。這不是必需的,但它只是在這裏顯示結果的一種方式。不知道你的代碼有什麼問題,但是這會給你一些工作與之比較。 Mongoose會自動將隱含的「_id」字段作爲ObjectId轉換。 –