在MongoDb中插入和查询某些订阅数据的正确方法

时间:2015-04-13 12:37:42

标签: mongodb nosql

我有一组用户可以购买的订阅计划,每个订阅都有一个以天为单位的句点,只要购买新订阅,就会推送到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日期尚未到达)以下哪一项更好? :

  1. db.users.find({ 'subscriptions.$.to' : { $gt : $currentDate} });

  2. 或者向expires_at集合添加另一个名为users的字段,每次添加新订阅时都会更新该字段(它始终等于to的最后一个值subscription数组中最后插入的项目的字段,然后使用db.users.find({ 'expires_at' : { $gt : $currentDate }})

  3. 进行查询

1 个答案:

答案 0 :(得分:0)

$currentDate是一个字段更新运算符,因此您无法将其与find方法一起使用,而是可以创建一个Date对象。像这样:

db.users.find({ your_field_name : { "$gt" : new Date() } })