0
たとえば、私はアクティビティフィードを作成したいと思いますが、複数のコレクションがあります。だから私はPosts
とLikes
のコレクションを持っていて、これらのコレクションの両方からすべての値を取得し、それらを日付でソートして返したいと思います。 MongoDbに参加させずに複数のコレクションを照会する方法はありますか?複数のコレクションを照会して出力をソート
たとえば、私はアクティビティフィードを作成したいと思いますが、複数のコレクションがあります。だから私はPosts
とLikes
のコレクションを持っていて、これらのコレクションの両方からすべての値を取得し、それらを日付でソートして返したいと思います。 MongoDbに参加させずに複数のコレクションを照会する方法はありますか?複数のコレクションを照会して出力をソート
データベースを永続的に変更する場合は、Mongodb aggregate methodを使用できます。あなたは、しかし、私は、各ブログ記事の文書を持つ推薦することができ、むしろ別のコレクションに投稿や同類を保存するよりも、同類の数を持っている場合は
//This is what your final, sorted array of blog post objects will be
var blogPosts = [];
//Search posts collection
db.posts.find({}, function(err, docs){
//Sort by how long ago post was made
posts = docs.sort(function(a,b){return a.timeAgo - b.timeAgo});
for(var i = 0; i < posts.length; i++){
//Add blog post to final array
blogPosts.push({post:posts[i], likes:0});
};
}.exec(function(err){
//Once executed, find likes
db.likes.find({}, function(err, likes){
for(var i = 0; i < likes.length; i++){
var index = blogPosts.findIndexOf(function(post){
//Find where in the array the postname associated with the like (I assume this is in your DB) is the name of a post
return post.name == likes[i].post;
});
//Add to final array
blogPosts[index].likes +=1
};
});
});
: しかし、あなたはまた、これを使用することができます。物事をもっと楽にするでしょう。
like: {
by: username,
post: blogpostname
}
post: {
by: username,
name: postname,
timeAgo: date,
}
...またはそれらの線に沿って何か:あなたは、各DBのドキュメント(私は推測)のために持っている何 。 代わりに、これはより効果的です:
post: {
by: username,
timeAgo: date,
name: postname,
likes: amountoflikes
}