users
{
"_id":"12345",
"admin":1
},
{
"_id":"123456789",
"admin":0
}
posts
{
"content":"Some content",
"owner_id":"12345",
"via":"facebook"
},
{
"content":"Some other content",
"owner_id":"123456789",
"via":"facebook"
}
这是我的 mongodb 中的一个示例。我想获取所有具有“via”属性等于“facebook”并由管理员(“admin”:1)发布的帖子。我不知道如何获取此查询。由于 mongodb 不是关系型数据库,所以无法进行连接操作。有什么解决办法?
最佳答案
您可以使用 $lookup
(multiple) 从多个集合中获取记录:
例子:
如果您有更多收藏(我这里有 3 个用于演示的收藏,您可以拥有 3 个以上)。我想从单个对象中的 3 个集合中获取数据:
集合如下:
db.doc1.find().pretty();
{
"_id" : ObjectId("5901a4c63541b7d5d3293766"),
"firstName" : "shubham",
"lastName" : "verma"
}
db.doc2.find().pretty();
{
"_id" : ObjectId("5901a5f83541b7d5d3293768"),
"userId" : ObjectId("5901a4c63541b7d5d3293766"),
"address" : "Gurgaon",
"mob" : "9876543211"
}
db.doc3.find().pretty();
{
"_id" : ObjectId("5901b0f6d318b072ceea44fb"),
"userId" : ObjectId("5901a4c63541b7d5d3293766"),
"fbURLs" : "http://www.facebook.com",
"twitterURLs" : "http://www.twitter.com"
}
现在您的查询将如下所示:
db.doc1.aggregate([
{ $match: { _id: ObjectId("5901a4c63541b7d5d3293766") } },
{
$lookup:
{
from: "doc2",
localField: "_id",
foreignField: "userId",
as: "address"
}
},
{
$unwind: "$address"
},
{
$project: {
__v: 0,
"address.__v": 0,
"address._id": 0,
"address.userId": 0,
"address.mob": 0
}
},
{
$lookup:
{
from: "doc3",
localField: "_id",
foreignField: "userId",
as: "social"
}
},
{
$unwind: "$social"
},
{
$project: {
__v: 0,
"social.__v": 0,
"social._id": 0,
"social.userId": 0
}
}
]).pretty();
那么您的结果将是:
{
"_id" : ObjectId("5901a4c63541b7d5d3293766"),
"firstName" : "shubham",
"lastName" : "verma",
"address" : {
"address" : "Gurgaon"
},
"social" : {
"fbURLs" : "http://www.facebook.com",
"twitterURLs" : "http://www.twitter.com"
}
}
如果您想要每个集合中的所有记录,那么您应该从查询中删除以下行:
{
$project: {
__v: 0,
"address.__v": 0,
"address._id": 0,
"address.userId": 0,
"address.mob": 0
}
}
{
$project: {
"social.__v": 0,
"social._id": 0,
"social.userId": 0
}
}
删除上述代码后,您将获得以下总记录:
{
"_id" : ObjectId("5901a4c63541b7d5d3293766"),
"firstName" : "shubham",
"lastName" : "verma",
"address" : {
"_id" : ObjectId("5901a5f83541b7d5d3293768"),
"userId" : ObjectId("5901a4c63541b7d5d3293766"),
"address" : "Gurgaon",
"mob" : "9876543211"
},
"social" : {
"_id" : ObjectId("5901b0f6d318b072ceea44fb"),
"userId" : ObjectId("5901a4c63541b7d5d3293766"),
"fbURLs" : "http://www.facebook.com",
"twitterURLs" : "http://www.twitter.com"
}
}
https://stackoverflow.com/questions/6502541/
相关文章:
java - “字段需要一个无法找到的 bean。”使用mongodb的错误spring restf
node.js - TypeError : db. 集合不是函数
javascript - 如何将参数传递给 Mongo 脚本
javascript - 在 MongoDB 和 Mongoose 中执行全文搜索的最佳方法
mongodb - 将 "working set"放入 MongoDB 的 RAM 是什么意思?
node.js - Mongodb的僧侣vs Mongoose
mongodb - MongoDB 3.0 中的“无法取消链接套接字文件”错误