我正在定义这样的猫态架构
var accountPostSchema = new mongoose.Schema({
account: {
id: { type: mongoose.Schema.Types.ObjectId, ref: 'Account' }
},
post: {
id: { type: mongoose.Schema.Types.ObjectId, ref: 'Post' }
}
});
app.db.model('AccountPost', accountPostSchema);
用户(帐户持有人)创建帖子时,我将帖子保存在帖子模式中并获取" postid"。然后我保存"邮政"one_answers" accountId"在上面的帐户postschema中
var fieldsToSet = {
post: {
id: postId
},
account: {
id: accountId
}
};
db.models.AccountPost.create(fieldsToSet, function(err, accountPost) {
if (err) {
// handle error
}
// handle success
});
输入很少的Postid和AccountID后,我在Mongo Shell中看到以下结果
> db.accountposts.find({})
{ "_id" : ObjectId("5835096d63efc04da96eb71e"), "post" : { "id" : ObjectId("5835096d63efc04da96eb71d") }, "account" : { "id" : ObjectId("5833c920c868d7264111da69") }, "__v" : 0 }
{ "_id" : ObjectId("583509e12052c7a2a93c4027"), "post" : { "id" : ObjectId("583509e12052c7a2a93c4026") }, "account" : { "id" : ObjectId("5833c920c868d7264111da69") }, "__v" : 0 }
现在如何找到一个给定帐户的所有匹配的"帖子"?(不是邮政)
例如,如果我的帐户是583509E12052C7A2A93C4026,我需要找到帖子。
我应该运行什么查询以获取匹配帖子?
我认为,您应该按照这种方式获取与特定accountID相关的所有帖子。
db.accountposts.find({'account.id' : accountId})
.populate('post.id')
.exec();
首先,我建议将您的架构更改为以下
var accountPostSchema = new mongoose.Schema({
account: {
type: mongoose.Schema.Types.ObjectId,
ref: 'Account'
},
post: {
type: mongoose.Schema.Types.ObjectId,
ref: 'Post'
}
});
这实际上更有意义,尤其是当您尝试填充细分时。实际上,我想说这个模式没有用。您为什么不像以下内容那样定义Post
架构?
var PostSchema = new mongoose.Schema({
poster: {
type: mongoose.Schema.Types.ObjectId,
ref: 'Account'
},
message: String
});
如果您使用后一个代码,则可以执行以下查询以获取特定用户的所有帖子:
db.posts.find({poster: accountId}, function(dbErr, userPosts) {
if(dbErr) {
// Handle the error.
}
// Do something with the posts by accountId in the array userPosts.
});
一旦您尝试填充poster
,从poster
中删除id
字段的优点就变得清晰。如果将poster
定义为具有字段id
的对象并尝试填充它,则需要访问有关海报的数据:
posterName = retrievedPost.poster.id.name;
另外,只要将poster
字段直接制作为ObjectId
,您就可以更直接地访问填充的用户:
posterName = retrievedPost.poster.name;