我有下面的Post
模式。post架构包含一个数组字段,该字段可能包含其他post作为回复。我想做的是检索没有在任何职位的答复领域引用的所有文件。基本上得到所有的职位,不是一个原始职位的答复。
const mongoose = require('mongoose');
const schema = new mongoose.Schema({
creator: {
type: mongoose.Schema.Types.ObjectId,
ref: 'User',
validate: [mongoose.Types.ObjectId.isValid, 'Creator ID is invalid']
},
owner: {
type: mongoose.Schema.Types.ObjectId,
ref: 'User',
validate: [mongoose.Types.ObjectId.isValid, 'Owner ID is invalid']
},
content: {
type: String,
required: 'Content is required'
},
likes: [
{
type: mongoose.Schema.Types.ObjectId,
ref: 'Like',
validate: [mongoose.Types.ObjectId.isValid, 'Like ID is invalid']
}
],
replies: [
{
type: mongoose.Schema.Types.ObjectId,
ref: 'Post'
}
]
}, {
autoCreate: true,
timestamps: true
});
const Post = mongoose.model('Post', schema);
module.exports = Post;
我试过使用$lookup
与$match
和$nin
,但我不能使它正常工作。任何帮助将不胜感激。
2条答案
按热度按时间r6hnlfcb1#
我认为更新模式以跟踪a)是否是原始帖子或b)是否是回复会更容易。然后,您可以只通过该布尔字段进行查询,而不是通过一系列数组进行循环。
bttbmeg02#
如果我没有弄错的话,这似乎是可行的: