sails.js - 如何在 Sails.js 模型中存储嵌套对象数组?

标签 sails.js waterline sails-mongo

长话短说,我正在创建一个用户模型,它需要能够有过期的订阅,并且想知道如何使用 Sails 正确地存储它们。我需要的模型是:

User : {

    ...

    subscriptions : [{
        artist : <association>,
        starts : {
            type : "date"
        },
        expires : {
            type : "date"
        }
    }]

    ...

我正在使用 MongoDB,并且知道这是可能的,但它需要通过 Sails.js 的 Waterline ORM 来完成。我是否必须使用与用户和艺术家关联的单独“订阅”模型?

最佳答案

这完全取决于您以后希望如何对您的订阅进行查询。

如果订阅被定义为数组或集合,SailsJS 查找方法不会处理直接说 User.find({"subscriptions.expires">=today}) 的方法。

如果您将 Subscription 定义为一个模型,那么您可以在您的 User 模型中将其作为一个集合,引用 Subscription,然后您对 Subscription 执行查询,例如 Subscrition.find({'expires'>=somedate)

缺点是这会创建一个新集合,该集合具有两个模型之间的关系,您不会获得包含所有数据的嵌入式对象,如果这是您尝试完成的。

如果你希望它全部在一个嵌入式对象中,你可以这样做,但是你需要使用 Waterline .native 方法,它允许你以 MongoDB NodeJS 驱动程序形式发送直接查询,如 Node.js MongoDB Driver API Documentation 中所述

应该是这样的

User.native(function(err, collection) {
if (err) {
  return console.log(err);
} else {
  collection
    .find({
      'subscriptions.expires': {
        $gte: new Date(2012, 7, 14)
      }
    }, {
      'data': 1
    }, 0, 1)
    .toArray(function(err, subscriptions) {
      if (err) {
        return console.log(err);
      } else {
        if (subscriptions.length > 0) {
          // Do whatever here
        } else {
          return console.log('No subscriptions found');
        }

      }
    });
}
});

关于sails.js - 如何在 Sails.js 模型中存储嵌套对象数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29286364/

相关文章:

mysql - Waterline ORM 删除列并转换为 mysql 的 myisam?

sails.js - 删除整个Sails-Memory数据库?

mongodb - SailsJS 部署到 Heroku,连接到 Mongolabs MongoDB

node.js - sails 错误 :throw new Error ('Can\' t set headers after they are sent.')

node.js - Sails-React : Receive data on programmatic redirection

node.js - Waterline/Sails.js 使用 MariaDB 进行批量插入和删除

javascript - SailsJS/水线 ORM : Update multiple entries using only one query

mongodb - sails 船。在 sails-mongo (mongodb) 上创建(和管理)索引的最佳方式

javascript - Async Await 是否违反了 sails 1.0 的 MVC?

sails.js - 使用sails-mongo在水线上计数分组