node新手请教一个问题。
我正在做一个微博系统,mongodb里插入了2个文档:user和article,user保存用户信息,article保存文章信息。
如下图!
用户的uid是不可以更改的,name可以更改,所以article文档中只存储了作者的uid,而没有存name。
那么问题来了,我如何在查询这个文章的时候将作者的name也找出来呢?谢谢解惑
node新手请教一个问题。
我正在做一个微博系统,mongodb里插入了2个文档:user和article,user保存用户信息,article保存文章信息。
如下图!
用户的uid是不可以更改的,name可以更改,所以article文档中只存储了作者的uid,而没有存name。
那么问题来了,我如何在查询这个文章的时候将作者的name也找出来呢?谢谢解惑
使用DBRef在存储的时候进行关联
假如user存储的ObjectID为:57574e3f33de6266b5845052c02c
在article写入这样操作:
var Ba={author:[new DBRef('user',ObjectId("57574e3f33de6266b5845052c02c"))],title:"xxx",.....}
db.article.insert(Ba)
在查询article时就可以读取到author对象了
没看到你article里面的uid这一项,但我想这不是问题,肯定要有的。
操作mongodb我一般喜欢用mongoose,这里需要mongoose的populate操作
首先在定义model的时候在article里面定义
uid:{type:mongoose.Schema.Types.ObjectId,ref:'User'}
然后查询的时候
ArticleModel
.findById(__theArticleId)
//下面第一个populate是最简单的populate,就是指明要populate什么东西,以及取出被populate的东西的哪些项目
.populate('uid','name')
//下面这个是一个复杂一些的深层populate
.populate({
//你还可以populate与article相关的文档里的另一个东西
//比如一个article有一个category,category里面有这个分类下面的热门用户的id
//你先populate这个article的category
//并且指明获得category的description和hotUserIds,
//然后再populate这些hotUserIds,并且指明请求hotUser们的name
path: 'category',
select: 'description hotUserIds',
populate:{
path:'hotUserIds',
select: 'name'
}
})
.exec(function(err,article){
//do something
})
10 回答11.1k 阅读
6 回答3k 阅读
5 回答4.8k 阅读✓ 已解决
4 回答3.1k 阅读✓ 已解决
2 回答2.7k 阅读✓ 已解决
4 回答2.5k 阅读✓ 已解决
3 回答2.3k 阅读✓ 已解决
mongo这种非关系型数据库,是鼓励你用多条查询来拼结果的。先把文章那条记录查出来,然后取出uid的值,去用户集合里查出用户信息。当然,如果不是设置uid作为主键的话,可以给uid建个索引