我有一组用户可以购买的订阅计划,每个订阅都有一个以天为单位的句点,只要购买新订阅,就会推送到users
集合subscriptions
数组,< / p>
我设计了以下架构:
{
username : 'an_string_field',
password : 'an_string_field',
//...
subscriptions : [ //an array field
{
'from' => 'some_old_date',
'to' => 'some_future_data',
'embeded_subscription' : {
'duration' : 60,
'price' : 50000,
'name' : 'two months plan'
}
},
//...
],
}
要查询订阅未过期的用户(to
日期尚未到达)以下哪一项更好? :
db.users.find({ 'subscriptions.$.to' : { $gt : $currentDate} });
或者向expires_at
集合添加另一个名为users
的字段,每次添加新订阅时都会更新该字段(它始终等于to
的最后一个值subscription
数组中最后插入的项目的字段,然后使用db.users.find({ 'expires_at' : { $gt : $currentDate }})
答案 0 :(得分:0)
$currentDate
是一个字段更新运算符,因此您无法将其与find
方法一起使用,而是可以创建一个Date
对象。像这样:
db.users.find({ your_field_name : { "$gt" : new Date() } })