查询MongoDB集合中的最新帖子

时间:2019-01-20 08:21:48

标签: mongodb mongoose

对于Mongodb / Mongoose / Node来说是新的。尝试进行查询以检索集合中所有文档中的最新帖子(例如10个最新帖子)。

我尝试了几种不同的查询方式。

MessageboardModel.find({"posts": {"time": {"$gte": ISODate("2014-07-02T00:00:00Z")}}} ...

我尝试执行上述操作只是为了尝试获取适当的嵌套时间属性,但是我尝试执行的所有操作均会引发错误。我肯定在这里想念什么...

以下是集合中的示例文档:

{
    "_id": {
        "$oid": "5c435d493dcf9281500cd177"
    },
    "movie": 433249,
    "posts": [
        {
            "replies": [],
            "_id": {
                "$oid": "5c435d493dcf9281500cd142"
            },
            "username": "Username1",
            "time": {
                "$date": "2019-01-19T17:24:25.204Z"
            },
            "post": "This is a post title",
            "content": "Content here."
        },
        {
            "replies": [],
            "_id": {
                "$oid": "5c435d493dcf9281500cd123"
            },
            "username": "Username2",
            "time": {
                "$date": "2019-01-12T17:24:25.204Z"
            },
            "post": "This is another post made earlier",
            "content": "Content here."
        }
    ],
    "__v": 0
}

集合中有很多文档。我想在整个馆藏的所有文档中得到最近的10篇帖子。

有帮助吗?

1 个答案:

答案 0 :(得分:0)

您可以尝试使用aggregation查询:

步骤: 1>匹配特定文档

2>使用$unwind拉伸其数组的文档。

3>使用time中的posts字段进行排序。

4>如果需要显示特定字段,请选择字段。

5>添加限制,需要多少文档。

<YOUR_MODEL>.aggregate([
{$match:{
"movie": 433249 //you may add find conditions here, otherwise you can keep {} or remove $match from here
}},
{$unwind:"$posts"}, //this will make the each array element with different different docs.
{$sort:{"posts. time":1}}, // sort using the date field now, depends on your requirement use -1 /1
{$project:{posts:1}}, //select docs only from posts field. [u can remove if you want every element, or may modify]
{$limit:10} //you want only last 10 posts
]).exec();

让我知道您是否仍然有任何问题或遇到任何错误。

会很喜欢答案