我发现Views是一种有用的方法,虽然不确定它是否最有效!例如,在movielens数据库中,我想使用'movieId'作为外键将评分集合中的'movieId'引用到电影集合中的'movieId'。
db.createView('rating-movie-view','ratings',[{$lookup:{from:"movies",localField:"movieId",foreignField:"movieId",as:"ratings_movie"}},{ $project:{'userId':1,'movieId':1,'rating':1,'timestamp':1,'ratings_movie.title':1,'ratings_movie.genres':1 } }])
新视图“rating-movie-view”已创建,具有所需的字段“标题”和“流派”。
db["rating-movie-view"].findOne()
{
"_id" : ObjectId("598747c28198f78eef1de7a3"),
"userId" : 1,
"movieId" : 1129,
"rating" : 2,
"timestamp" : 1260759185,
"ratings_movie" : [
{
"title" : "Escape from New York (1981)",
"genres" : "Action|Adventure|Sci-Fi|Thriller"
}
]
}
希望这个有用!
对于不熟悉movielens数据的人,这里是模式
var MovieSchema = new mongoose.Schema({
movieId: Number,
title: String,
genres: String,
});
var RatingSchema = new mongoose.Schema({
userid: Number,
movieId:Number,
rating: Number,
timestamp:Number,
});
//查看模式
var RatingViewSchema = new mongoose.Schema({
userid: Number,
movieId:Number,
rating: Number,
timestamp:Number,
rating_movie:{title:String,genres:String}
});
_id
从0,1 ++ 开始,而不是ObjectId
。 - parwatcodesObjectId、Number、String 和 Buffer
。只要被引用的集合将该引用值作为其_id
字段即可。 - Jyotman Singh