gpt4 book ai didi

javascript - 在 Mongoose 中对子文档进行排序

转载 作者:行者123 更新时间:2023-11-30 16:03:31 25 4
gpt4 key购买 nike

我正在尝试按存储在子文档中的日期对 Mongoose 的输出进行排序。我相信这可以在客户端更轻松地完成,但我想限制对服务器资源的消耗并延迟加载子文档,而不是一次加载它们。

我正在开发私有(private)消息功能。我定义了一个名为 Conversations 的模式,并定义了另一个名为 messages 的模式。他们的代码如下:

const mongoose = require('mongoose');

const ChatSchema = new mongoose.Schema({
messageBody: {
type: String,
required: true
},
from: {
type: String,
required: true
}
},
{
timestamps: true // Saves createdAt and updatedAt as dates. createdAt will be our timestamp.
});

const ConversationSchema = new mongoose.Schema({
participants: [String],
messages: [ChatSchema]
});

module.exports = mongoose.model('Chat', ChatSchema);
module.exports = mongoose.model('Conversation', ConversationSchema);

消息保存得很好,信息似乎正确地存储在数据库中。当我尝试使用 cursor.sort() 方法首先返回最新消息时,我的问题就来了。查询(要遵循的代码)按预期返回一条消息,但我无法让它返回最新的消息。

exports.getConversations = function(req, res, next) {
// Only return one message from each conversation to display as snippet
Conversation.find({ participants: req.user._id })
.sort('-messages.createdAt')
.slice('messages', 1).exec(function(err, conversations) {
if (err) {
res.send({ error: err });
return next(err);
} // other code...

我已经尝试了我在这篇文章中找到的各种变体,但都无济于事:https://stackoverflow.com/a/15081087/5956144

最佳答案

您无需费力地使用 ORM(一种速度缓慢且文档不足的 ORM)来按嵌套属性对对象数组进行排序。穿上你的超棒裤子,推出你自己的排序功能,收工吧。

function byMessageCreatedAt(a, b){
//modify the below comparison however you need to to compare two times
return a.messages.createdAt - b.messages.createdAt
}

var results = conversation.find({blah}).sort(byMessageCreatedAt);

发现有关在 javascript 中进行排序的详细信息 here

关于javascript - 在 Mongoose 中对子文档进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37357140/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com