2013-02-08 48 views
1

考慮我定義了一個貓鼬架構如何獲取虛擬屬性。 Node.js的貓鼬+ +的MongoDB

var Schema_MySchema = new mongoose.Schema({ 
Field1: String, Field2: String 
}); 

我已經加入虛擬屬性&下列方式設置選項:

Schema_MySchema.virtual('USERNAME').get(function() { 
    return this.Field1; 
}); 

Schema_MySchema.set('toJSON', { virtuals: true }); 

schema的對象從MongoDB中檢索數據如下:

var Mod_Obj = mongoose.model('SchemaName', Schema_MySchema); 
var Model_Instance = new Mod_Obj(); 
Model_Instance.find({}, function (err, docs) { 
    /* 
     Here I get a object docs with following structure: 
     [{ _id: ObjectId("511XXXdff9c4c419000008"), 
      Field1: 'SOMEvalueFromMongoDB_1', 
      Field2: 'SOMEvalueFromMongoDB_2', 
      USERNAME: 'SOMEvalueFromMongoDB_1' 
     }] 
    */ 
}); 

Now我想刪除實際屬性從MongoDB的回來,說我想從docs

刪除Field1我嘗試以下辦法來消除:

delete docs.Field1;

2.var Json_Obj = docs.toJSON(); delete Json_Obj.Field1;

3.var Json_Obj = docs.toObject({ virtuals: true }); delete Json_Obj.Field1;

4.delete docs[0].Field1;

5.delete docs[0]['Field1'];

所有方法沒有奏效。 :-(

如果執行了簡單的JSON測試它的工作:

var a = { 'A' : 1, 'B': 2 }; 
delete a.A; 
console.log(a); //prints only object with B attribute only. i.e. { B: 2 } 

誰能告訴我什麼是錯在這裏提前

謝謝...

+0

你嘗試'刪除文檔[「字段1」]',什麼是什麼輸出? – mithunsatheesh

回答

2

我相信你是?缺少索引docs是一個數組。

如果您的文檔具有以下結構

[{ _id: ObjectId("511XXXdff9c4c419000008"), 
     Field1: 'SOMEvalueFromMongoDB_1', 
     Field2: 'SOMEvalueFromMongoDB_2', 
     USERNAME: 'SOMEvalueFromMongoDB_1' 
    }] 

刪除代碼應該是

delete docs[index]['Field1'] 

即。刪除Field1第1個要素

delete docs[0]['Field1'] 

更新爲評論:

請參閱this answer上SO。

在這裏,您需要做的像

var k = docs[index].toObject(); 
delete k['Field1']; 
+0

這已經嘗試過,沒有工作:-( –

1

你必須保存文檔場被刪除後,嘗試如下

var Mod_Obj = mongoose.model('SchemaName', Schema_MySchema); 
var Model_Instance = new Mod_Obj(); 
Model_Instance.find({}, function (err, docs) { 
    /* 
     Here I get a object docs with following structure: 
     [{ _id: ObjectId("511XXXdff9c4c419000008"), 
      Field1: 'SOMEvalueFromMongoDB_1', 
      Field2: 'SOMEvalueFromMongoDB_2', 
      USERNAME: 'SOMEvalueFromMongoDB_1' 
     }] 
    */ 
delete docs[0].Field1; 
docs[0].save(function(err){ 
if(err){ 
console.log(err); 
}else{ 
console.log("Field1 is deleted"); 
} 
}); 
}); 
1

找到了一些解決方案。 下面是貓鼬

做到這一點的方式
schema.options.toObject.transform = function (doc, ret, options) { 
    // remove the _id of every document before returning the result 
    delete ret._id; 
} 

轉到Document.toObject([options])然後滾動主題變換