每个消息文档都有一个messageTrackingId。我想返回所有消息,但排除具有相同messageTrackingId的文档。因此,例如,如果我的表中有4个文档,其中3个具有相同的messageTrackingId值,则Messages.find()应该只返回2个文档。
我正在尝试使用distinct仅返回唯一文档,因此我不会获得具有相同messageTrackingId的重复项。目前邮递员没有退回任何文件。
如果我改变了
Messages.find({query}).distinct('messageTrackingId')
至
Messages.find(query)
然后返回所有receiveId的文档。但是当我添加distinct时,没有任何结果。
app.get('/api/messages',(req,res,next)=>{
query = {};
inbox = false;
messageId = false;
if(req.query.recipientId){
query = { recipientId: req.query.recipientId }
inbox = true;
Messages.aggregate(// Pipeline
[
// Stage 1
{
$group: {
_id: "$messageTrackingId",message : { $addToSet: '$message' },recipientId : { $addToSet: '$recipientId' },creator : { $addToSet: '$creator' },messageTrackingId : { $addToSet: '$messageTrackingId' },}
},// Stage 2
{
$project: {
_id: 1,message: { $arrayElemAt: ["$message",0 ] },recipientId: { $arrayElemAt: ["$recipientId",creator: { $arrayElemAt: ["$creator",messageTrackingId: { $arrayElemAt: ["$messageTrackingId",0 ] }
}
}
])
消息模型
const mongoose = require("mongoose");
const uniqueValidator = require("mongoose-unique-validator");
const messagingSchema = mongoose.Schema({
creator: { type: mongoose.Schema.Types.ObjectId,ref: "User" },recipient: { type: String,required: true },recipientId: { type: String,message: { type: String,subject: { type: String,creationDate: { type: Date,messageTrackingId: { type: String }
// readDate: { type: Date,required: true }
});
module.exports = mongoose.model("Messages",messagingSchema);