【问题标题】:How Do I Store Nested Object Array in Sails.js Model?如何在 Sails.js 模型中存储嵌套对象数组?
【发布时间】:2015-03-26 18:38:44
【问题描述】:

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

User : {

    ...

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

    ...

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

【问题讨论】:

  • 简短回答:是的!您需要一个新的、单独的订阅模型

标签: sails.js waterline sails-mongo


【解决方案1】:

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

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

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

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

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

应该是这样的

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');
        }

      }
    });
}
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-07-24
    • 1970-01-01
    • 2020-06-11
    • 1970-01-01
    • 2015-06-03
    • 1970-01-01
    • 1970-01-01
    • 2020-05-13
    相关资源
    最近更新 更多