Mongoose - 如何只填充每个对象的嵌套数组中的第一个元素
Mongoose - How to populate only the first element in a nested array of every object
我正在尝试在 NodeJS、Mongoose 和 React Native 中创建一个聊天应用程序,我想向用户显示每次对话的最后一条消息。
我的对话模式中有一组消息,如下所示:
const ConversationSchema = new mongoose.Schema({
{...}
messages: [
{
type: mongoose.Schema.Types.ObjectId,
ref: 'Message'
}
]
{...}
})
我想知道是否有人可以帮助我只填充每个对话的第一条消息,因此响应将是:
conversations: [
{
"_id": ObjectId(...)
"messages": [
"text": "Last message"
]
},
{
"_id": ObjectId(...)
"messages": [
"text": "Last message"
]
},
...
]
我目前正在使用 mongoose 的 populate
功能,但问题是如果只填充第一个对话:
Conversation.find().populate(query).exec((err, conversations => {
{...}
})
const query = {
{
path: "messages",
options: {
limit: 1,
sort: { _id: -1 }
}
}
}
注意:如果我没有指定 limit: 1
和 sort: { _id: -1 }
,它会正确填充数组的所有元素,但这不是我要找的。
感谢任何能帮助我的人!
您需要使用 perDocumentLimit 而不是 Limit
If you need the correct limit, you should use the perDocumentLimit option (new in Mongoose 5.9.0). Just keep in mind that populate() will execute a separate query for each story, which may cause populate() to be slowe
我正在尝试在 NodeJS、Mongoose 和 React Native 中创建一个聊天应用程序,我想向用户显示每次对话的最后一条消息。
我的对话模式中有一组消息,如下所示:
const ConversationSchema = new mongoose.Schema({
{...}
messages: [
{
type: mongoose.Schema.Types.ObjectId,
ref: 'Message'
}
]
{...}
})
我想知道是否有人可以帮助我只填充每个对话的第一条消息,因此响应将是:
conversations: [
{
"_id": ObjectId(...)
"messages": [
"text": "Last message"
]
},
{
"_id": ObjectId(...)
"messages": [
"text": "Last message"
]
},
...
]
我目前正在使用 mongoose 的 populate
功能,但问题是如果只填充第一个对话:
Conversation.find().populate(query).exec((err, conversations => {
{...}
})
const query = {
{
path: "messages",
options: {
limit: 1,
sort: { _id: -1 }
}
}
}
注意:如果我没有指定 limit: 1
和 sort: { _id: -1 }
,它会正确填充数组的所有元素,但这不是我要找的。
感谢任何能帮助我的人!
您需要使用 perDocumentLimit 而不是 Limit
If you need the correct limit, you should use the perDocumentLimit option (new in Mongoose 5.9.0). Just keep in mind that populate() will execute a separate query for each story, which may cause populate() to be slowe