node.js - Waterline 插入与返回 id 的一对多关联

标签 node.js waterline

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

我有以下代码来尝试插入一个文件。 Waterline 将返回包含所有关联文件的文档模式,但我想要的只是刚刚插入的文件的最后一个插入 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);                                            
    });
});

最佳答案

恐怕 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。性能方面,它应该与内部水线相同,以类似的方式创建文件。

关于node.js - Waterline 插入与返回 id 的一对多关联,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31198643/

相关文章:

node.js - populate() 中的条件不起作用

javascript - sail.js 模型中的一个模型属性默认与另一个相同

node.js - 无法在 npm 上安装 cordova ionic

sails.js - 如何自动填充 url/model/<id>/association 的 sails 蓝图的嵌套关联

node.js - 如何通过 Node.js Express 从 Cloudinary 中删除图像?

javascript - 从 csvtojson 获取可用数组

mysql - 使用 sailsjs 从 database.query() 返回数据

node.js - 如何在 SailsJs 中使用 Sequelize

node.js - Node : abort http reply while in progress

sql-server - msnodesql 模块在编译期间出现错误