我对MongoDB很新,需要帮助根据另一个集合的数据对一个集合进行选择,或者某种左连接。
我有两个收藏品,动物和饭菜,我希望得到在特定日期之后有最后一次登记用餐的动物(让我们说20171001)以确定是否动物仍然活跃。
collection animals:
{
name: mr floof,
id: 12345,
lastMeal: abcdef
},
{
name: pluto,
id: 6789,
lastMeal: ghijkl
}
collection meals:
{
id: abcdef,
created: 20171008,
name: carrots
},
{
id: ghijkl,
created: 20170918,
name: lettuce
}
因此,在这种情况下,查询的预期输出将是:
{
name: mr floof,
id: 12345,
lastMeal: abcdef
}
Floof先生的最后一餐是20171008,即20171001之后。
希望我足够清楚,但如果没有,请不要犹豫。
答案 0 :(得分:2)
您可以尝试以下聚合查询。
db.animals.aggregate([ [
{
"$lookup": {
"from": "meals",
"localField": "lastMeal",
"foreignField": "id",
"as": "last_meal"
}
},
{
"$unwind": "$last_meal"
},
{
"$match": {
"last_meal.created": {
"$gt": 20171001
}
}
}
])
更多信息here。
您可以在$project
阶段后使用排除$match
来格式化排除连接字段的响应。像{ $project: {"last_meal":0} }
答案 1 :(得分:1)
MongoDB支持与$lookup
的连接,在您的情况下,您可以使用以下查询: -
db.animals.aggregate([
{
$lookup:
{
from: "meals",
localField: "lastMeal",
foreignField: "id",
as: "last_meal"
}
},
{
$match: {
"created" : {
$gt: "date" //your date format
}
}
}
])
谢谢!