Node.js MongoDB&;Mongoose:Mongoose能否在创建引用文档之前映射引用文档?

Node.js MongoDB&;Mongoose:Mongoose能否在创建引用文档之前映射引用文档?,node.js,mongodb,mongoose,Node.js,Mongodb,Mongoose,我觉得我的帖子标题有点模糊。让我澄清一下 我有以下模式: var listSchema = mongoose.Schema({ _owner: { type:ObjectId, ref: 'User' }, title: String, description: String, creation_date: { type: Date, default: Date.now } })

我觉得我的帖子标题有点模糊。让我澄清一下

我有以下模式:

   var listSchema = mongoose.Schema({
            _owner: { type:ObjectId, ref: 'User' },
            title: String,
            description: String,
            creation_date: { type: Date, default: Date.now }
        });


        var taskSchema = mongoose.Schema({
            _taskList:   { type: ObjectId, ref: 'List' },
            title: String,
            description: String,
            creation_date: { type: Date, default: Date.now }
        });

    var List = mongoose.model('List', listSchema);
    var Task = mongoose.model('Task', taskSchema);
每个“任务”引用一个“列表”。是否可以保存引用集合中不存在的“列表”的新“任务”?例如:

 //assume I have a user.id 

    var NewList = new List({
                    _owner: user._id,
                    title: 'Test List',
                    description: 'List Description'
                });

    var NewTask = new Task({
                    _taskList : NewList, //ref to the document above (_id not created yet)
                    title: 'Task Title',
                    description: 'Task Description'

                });

   NewTask.save(function(err, task){
                ...
               });
这样做是可能的还是我需要保存列表然后保存任务


非常感谢

Mongoose实际上为一个新的文档客户端创建了
\u id
值,因此您甚至在保存之前就可以访问
新列表的
\u id

因此,您可以简单地执行以下操作:

var NewTask = new Task({
                _taskList : NewList._id, 
                title: 'Task Title',
                description: 'Task Description'
            });

这绝对是可能的。您可以手动设置ID。但是你认为这种方法有问题吗?如果
NewList.save
NewTask.save
完成后失败怎么办?嗯,一致性是Mongo的一个普遍问题…@古怪的肯定。我假设如果引用的文档save()失败,则两个文档都不会保存。这是您在另一个环境中使用RDBMS ORM所期望的事务行为。就您所知,是否有必要执行两个保存事务(以我的示例为例)?那很好。只是想知道。