排序updatedAt mongoDB

时间:2017-06-14 19:54:15

标签: node.js sorting mongoose

所以在我的网页www.groupwrites.com上我正在显示"阅读"页。这些故事目前按创建顺序显示(即最新的故事)。我试图弄清楚如何首先使用最近创建/更新的那些显示它们。我在cloud9上使用mongoDB,节点JS。我一直在努力研究并知道我应该使用updatedAt,但我不知道如何插入所有内容。我不知道如何在put路径中更新updatedAt的时间戳。

这是我的索引代码:

// INDEX - 显示所有故事

router.post("/browse", middleware.isLoggedIn, function(req, res, next){
    // get data from form and add to stories array
    var title = req.body.title
    var image = req.body.image
    var desc = req.body.description
    var category = req.body.category
    var author = {
        id: req.user._id,
        username: req.user.username
    }
    var newStory = {title: title, image: image, description: desc, author: author, category: category}
    // Create a new story and save to database
    Story.create(newStory, function(err, newlyCreated){
        if (err) { 
            return next(err);
        } else {
            // redirect back to stories page
            req.flash("success", "Successfully published story!")
            res.redirect("/browse")
        }
    })
})

//创建 - 向DB添加新故事

// New Content

router.get("/stories/:id/content/new", middleware.isLoggedIn, function(req, res, next){
    // Find story by id
    Story.findById(req.params.id, function(err, story){
        if (err) { 
            return next(err);
        } else {
            res.render("content/new", {story: story}) 
        }
    })
})

// Create Content
router.post("/stories/:id/content", middleware.isLoggedIn, function(req, res, next){
    // Look up story using ID
    Story.findById(req.params.id).populate({path: 'subscribors', model: 'User'}).exec(function(err, story){
        if (err) { 
            return next(err);
        } else {
            Content.create(req.body.content, function(err, content){
                if (err) { 
                    return next(err);
                } else {
                    if(story.subscribors.length) {
                        var count = 0;
                        story.subscribors.forEach(function(subscribor) {
                            // create alert for each subscribor and add to subscribor's alerts
                            Alert.create({follower: story.author.id, followed: subscribor, story: story, isUpdated: true}, function(err, newAlert) {
                                if(err) {
                                    return next(err);
                                }
                                // console.log(newAlert);
                                subscribor.alerts.push(newAlert);
                                subscribor.save();
                                count+=1;
                                if(count === story.subscribors.length) {
                                    // Add username and ID to content
                                    content.author.id = req.user._id;
                                    content.author.username = req.user.username;
                                    // Save content
                                    content.save();
                                    story.content.push(content);
                                    story.save();

                                    req.flash("success", "Successfully added chapter!");
                                    return res.redirect("/stories/" + story._id);
                                }
                            });
                        });
                    } else {
                        // Add username and ID to content
                        content.author.id = req.user._id;
                        content.author.username = req.user.username;
                        // Save content
                        content.save();
                        story.content.push(content);
                        story.save();

                        req.flash("success", "Successfully added chapter!");
                        return res.redirect("/stories/" + story._id);
                    }

                }
            });
        }
    });
});

// Content Edit Route
router.get("/stories/:id/content/:content_id/edit", middleware.checkContentOwnership, function(req, res){
    Content.findById(req.params.content_id, function(err, foundContent){
        if(err){
            res.redirect("back")
        } else{
              res.render("content/edit", {story_id: req.params.id, content: foundContent})
        }
    })
})

// Content Update 
router.put("/stories/:id/content/:content_id", middleware.checkContentOwnership, function(req, res){
    Content.findByIdAndUpdate(req.params.content_id, req.body.content, function(err, updatedContent){
        if(err){
            res.redirect("back")
        } else {
            req.flash("success", "Successfully edited chapter!")
            res.redirect("/stories/" + req.params.id)
        }
    })
})

这是故事内容的代码(即在故事中添加章节时):

<asp:ListView runat="server" ID="lstService" DataTextField="Name"
    DataValueField="Id" AutoPostBack="True">
    <LayoutTemplate>
        <table runat="server" id="table1">
            <tr runat="server" id="itemPlaceholder"></tr>
        </table>
    </LayoutTemplate>
    <ItemTemplate>
        <tr runat="server">
            <td runat="server">

                <asp:Label ID="NameLabel" runat="server"
                    Text='<%#Eval("Name") %>' Width="500px" Height="30px" />

                <asp:Button CssClass="btn btn-default" ID="srvButton" runat="server"
                    Text="Add" OnClick="srvButton_Click" />
                <div class="voffset3"></div>

            </td>
        </tr>
    </ItemTemplate>
</asp:ListView>

1 个答案:

答案 0 :(得分:0)

定义Mongoose Schema时,

升序

1 降序 -1

示例:

"use strict";
var mongoose = require('mongoose');
var db= require('mongoose').models;
let findOrCreate = require('findorcreate-promise');

var abc= new mongoose.Schema({
    name: String,
    updated_At: { type: Date, default: Date.now } // like this you can define 
});
mongoose.model('abc', abc);

and you can use this by :


db.abc.find({})
.sort({'updated_At':1})  //1 for ascending and -1 for descending
.exec(Your callback function)

这将从最小的updated_At日期到最大的日期进行排序。

由于