长话短说我正在创建一个需要能够过期订阅的用户模型,并且想知道如何使用Sails正确存储它们。我需要的模型是:
User : {
...
subscriptions : [{
artist : <association>,
starts : {
type : "date"
},
expires : {
type : "date"
}
}]
...
我正在使用MongoDB,并且知道这是可能的,但是需要通过Sails.js的Waterline ORM来完成。我是否必须使用与用户和艺术家相关联的单独“订阅”模型?
答案 0 :(得分:2)
这完全取决于您以后如何对订阅进行查询。
如果订阅被定义为数组或集合,则SailsJS find方法不会直接处理User.find({"subscriptions.expires">=today})
的方式。
如果您将Subscription定义为模型,那么您可以将其设置为User模型中的集合,引用Subscription,然后对Subscription执行查询,如Subscrition.find({'expires'>=somedate)
。
缺点是,这会创建一个具有两个模型之间关系的新集合,如果您尝试完成此任务,则不会获得包含所有数据的嵌入对象。
如果你希望它全部在嵌入式对象中,你可以这样做,但是你需要使用Waterline .native方法,它允许你以MongoDB NodeJS驱动程序的形式发送直接查询,如{{ 3}}
这就像是
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');
}
}
});
}
});