gpt4 book ai didi

javascript - 选择集合并获取 MongoDB 中其他集合中每个集合的最后一项

转载 作者:行者123 更新时间:2023-12-03 05:18:26 24 4
gpt4 key购买 nike

我使用以下代码订阅了该出版物。所以在我的服务器端文件中,

Meteor.publish('people', function() {
cursor = EmailDB.find({category:{$ne:"Spammer"}},{sort:{"lastMessage.date": -1},limit:20});
let transformData = (fields) => {
// this is the person we're processing now
let eadd = fields.eadd;

// get the latest message for this person
key.eadd = eadd;
let lastMessage = MessageDB.findOne(key,
{
sort: {date: -1}
}
);

// add his last message to the returned data
fields.lastMessage = lastMessage;

return fields;
};

let handle = cursor.observeChanges({
added: (id, fields) => {
fields = transformData(fields);
this.added('emails', id, fields);
},
changed: (id, fields) => {
fields = transformData(fields);
this.changed('emails', id, fields);
},
removed: (id) => {
this.removed('emails', id);
}
});

this.ready();

this.onStop(() => {
handle.stop();
});
return cursor;
}

它获取Person的所有记录。我想得到每个人的最新消息。所以我使用了上面的代码,但它不起作用,它没有向我的查询添加其他字段。

我只需要订阅并获取所有记录,并且每个记录中必须有最后一条消息。

最佳答案

每当您想要连接来自 2 个已发布集合的数据时,您都可以选择在客户端或服务器上执行此操作。如果您在客户端上执行此操作,那么您就为自己创建了竞争条件。它可以解决,但我发现在服务器上更干净、更容易。这使得客户端的操作非常简单,因为您只需要订阅一个集合。

因此,要在服务器上执行此操作,您可以在发布中进行处理。在那里,您可以转换返回的集合 (PersonDB) 并向其中添加数据 (MessagesDB)。

我不知道你的收藏是什么样子,也不知道它们是如何命名的,所以我显然在这里做了一些假设。

Meteor.publish('people', function() {
let cursor = PersonDB.find({});

let transformData = (fields) => {
// this is the person we're processing now
let personId = fields.personId;

// get the latest message for this person
let lastMessage = MessagesDB.findOne({personId: personId},
{
sort: {createdAt: -1}
}
);

// add his last message to the returned data
fields.lastMessage = lastMessage;

return fields;
};

let handle = cursor.observeChanges({
added: (id, fields) => {
fields = transformData(fields);
this.added('personsdb', id, fields);
},
changed: (id, fields) => {
fields = transformData(fields);
this.changed('personsdb', id, fields);
},
removed: (id) => {
this.removed('personsdb', id);
}
});

this.ready();

this.onStop(() => {
handle.stop();
});
});

在客户端上,您可以像平常一样订阅 PersonDB,并像平常一样进行查找,并且在每条记录上您现在都会附加一个“lastMessage”字段。

关于javascript - 选择集合并获取 MongoDB 中其他集合中每个集合的最后一项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41503019/

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