水线插入与返回ID的一对多关联

时间:2015-07-03 04:44:51

标签: node.js waterline

我有两个模型,文档和文件,每个文档可以有多个文件,而每个文件只能属于一个文档(一个到多个)。

我有以下代码尝试插入一个文件。 Waterline将返回Document模式以及所有相关文件,但我想要的只是我刚刚插入的文件的最后一个插入ID。

Document.findOne({hash: documentHash}).exec(function(err, document) {           
    if (err) {return res.serverError(err);}                                                                     

    document.files.add({
        name: req.param("name"),
        creator: req.param("userID");
    });

    document.save(function(err, model) {
        if (err) {return res.serverError(err);}

        //it returned the Document modal, but I want the last insert id
        console.log(model);  
        res.send(1);                                            
    });
});

1 个答案:

答案 0 :(得分:2)

我担心document.save()只会返回model的填充版本。您可以在model.files中查看所有文件,但是您可以自行决定最后一个文件。

另一种方法是在将文件添加到文档之前创建该文件。你应该能够做到:

//...

File.create({
  name: req.param("name"),
  creator: req.param("userID");
}, function(err, file){
  if (err) {return res.serverError(err);}

  var newFileId = file.id;
  document.files.add(file.id);
  document.save(function(err, model) {
    if (err) {return res.serverError(err);}

    // the Document modal
    console.log(model);
    // the last insert id
    console.log('last inserted id:', newFileId);  
    res.send(1);                                            
  });
});

//...

在这种情况下,newFileId将拥有您需要的ID。性能方面,它应该与内部水线必须以类似方式创建文件相同。