0
我試圖將MongoDB文檔從一個集合保存到另一個集合。我想通過我的API端點進行檢索時,它看起來像這樣。我單獨創建錯誤,並希望通過ID通過機器加入。將mongodb文檔存儲在另一個文檔中
{
"_id": "59634780c464263b28a6891a",
"name": "GLUE-SM-21",
"status": false,
"__v": 0,
"error": {
"_id" : ObjectId("59769b9ad1050f244cadfced"),
"count" : 5,
"name" : "Error-001-J",
"__v" : 0
}
}
但我得到這個。
{
"_id": "59634780c464263b28a6891a",
"name": "GLUE-SM-21",
"status": false,
"__v": 0,
"error": [
"59769b9ad1050f244cadfced"
]
}
這裏我附上我目前的工作。
錯誤模式
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var ErrorSchema = new Schema({
name: String,
count: Number
});
module.exports = mongoose.model('Error', ErrorSchema);
機模式
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
const ObjectId = Schema.Types.ObjectId;
var Error = require('./error');
var MachineSchema = new Schema({
name: String,
status: Boolean,
error: [{ type: ObjectId, ref: 'Error', default: null }]
});
module.exports = mongoose.model('Machine', MachineSchema);
在默認情況下沒有錯誤。這是我的保存代碼。
var machine = new Machine(); // create a new instance of the Machine model
machine.name = req.body.name; // set the machine name (comes from the request)
machine.status = 1; // set the machine status (comes from the request)
machine.error = null;
machine.save(function(err) {
if (err)
res.send(err);
res.json({ message: 'Machine created!' });
});
這是我的更新代碼。
Machine.findById(req.params.machine_id, function(err, machine) {
if (err)
res.send(err);
machine.name = machine.name;
if(req.body.error && machine.status) {
machine.status = false;
} else if(!req.body.error && !machine.status) {
machine.status = true;
}
machine.error = req.body.error;
machine.save(function(err) {
if (err)
res.send(err);
io.emit('machine', machine);
res.json({ message: 'Machine updated!' });
});
});
問題是,'MachineSchema'「仍然」只需要存儲ObjectId'的數組。因此,即使您嘗試以不同的格式進行存儲,「模式」也會出錯或「投射」到已註冊的類型。您需要使用** new **模式註冊新模型,**或**在更多「原始」代碼中進行轉換,而不使用任何模式。那麼當然你需要註冊一個適合你的新數據結構的模式。 –