将mongodb文档存储在另一个文档中

时间:2017-07-25 02:11:23

标签: mongodb mongoose

我正在尝试将MongoDB文档从一个集合保存到另一个集合。通过我的API端点检索时,我希望它看起来像这样。我单独创建错误,并想通过id加入机器。

{
    "_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!' });
            });

        });

1 个答案:

答案 0 :(得分:0)

我找到了解决方案。

我已将机器文档中的错误文档的对象ID保存为错误属性。我已经使用mongo上的填充功能更新了我的代码。

Machine.find().populate("error").exec(
            function(err, machines) {
            if (err)
                res.send(err);

            res.json(machines);
        }
        );