长话短说,我正在创建一个用户模型,它需要能够有过期的订阅,并且想知道如何使用 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/