我有以下三种文件:
vilya_be> db.plots.find({})
[
{
_id: ObjectId("6426b069ca83da130cdb7f70"),
x: 0,
y: 0,
_class: 'com.vilya.farm.domain.model.Plot'
}
]
vilya_be> db.users_have_plots.find({})
[
{
_id: ObjectId("6426b073ca83da130cdb7f71"),
userId: '6412c76956d4170a7de34d92',
plot: DBRef("plots", ObjectId("6426b069ca83da130cdb7f70")),
_class: 'com.vilya.farm.domain.model.UserPlot'
}
]
vilya_be> db.users.find({})
[
{
_id: ObjectId("6412c76956d4170a7de34d92"),
email: 'abc@abc.com',
password: '$2a$10$s9VgOYd.fOKZF66TnAsjWemiCYkA7aG45NJpuSNgbVxpcIGF7fWqu',
firstName: 'f',
lastName: 'l',
plots: [ DBRef("users_have_plots", ObjectId("6426b073ca83da130cdb7f71")) ],
_class: 'com.vilya.farm.domain.model.User'
},
{
_id: ObjectId("6414667360e4ba4481052627"),
email: 'abc1@abc.com',
password: '$2a$10$OP52phZ61l2JX2e2TQOu9ubYFBYcPeqEZ92ox2Nyyp5e.MEZk7GhS',
firstName: 'f',
lastName: 'l',
_class: 'com.vilya.farm.domain.model.User'
}
]
我想在一个命令中加载所有的users
和他们的users_have_plots
(以及他们的plots
).
我试过了:
db.users.aggregate([
{
"$lookup": {
"from": "users_have_plots",
"let": {
"plots": "$plots"
},
"pipeline": [
{
"$match": {
"$expr": {
"$in": [
"$_id",
"$$plots"
]
}
}
},
{
"$lookup": {
"from": "plots",
"localField": "plot",
"foreignField": "_id",
"as": "plot"
}
}
],
"as": "plots"
}
}
]);
它给了我:PlanExecutor error during aggregation :: caused by :: $in requires an array as a second argument, found: missing
还有这个:
db.users.aggregate([
{
"$lookup": {
"from": "users_have_plots",
"let": {
"plots": "$plots"
},
"pipeline": [
{
"$match": {
"$expr": {
"$in": [
"$_id",
"$$plots.ObjectId"
]
}
}
},
{
"$lookup": {
"from": "plots",
"localField": "plot",
"foreignField": "_id",
"as": "plot"
}
}
],
"as": "plots"
}
}
]);
它还给了我:PlanExecutor error during aggregation :: caused by :: $in requires an array as a second argument, found: missing
我是MongoDB的新手,只是找不到任何方法来让它工作.任何帮助都将不胜感激!
Mongo版本:Mongo:6.0.2-在Docker桌面上运行焦点
编辑: 已try :
db.users.aggregate([{
"$lookup": {
"from": "users_have_plots",
"let": {
"plots": "$plots"
},
"pipeline": [
{
"$match": {
"$expr": {
"$in": [
"$_id",
{
"$ifNull": [
"$$plots.ObjectId",
[]
]
}
]
}
}
},
{
"$lookup": {
"from": "plots",
"localField": "plot",
"foreignField": "_id",
"as": "plot"
}
}
],
"as": "plots"
}
}
])
给我:
[
{
_id: ObjectId("6412c76956d4170a7de34d92"),
email: 'abc@abc.com',
password: '$2a$10$s9VgOYd.fOKZF66TnAsjWemiCYkA7aG45NJpuSNgbVxpcIGF7fWqu',
firstName: 'f',
lastName: 'l',
plots: [],
_class: 'com.vilya.farm.domain.model.User'
},
{
_id: ObjectId("6414667360e4ba4481052627"),
email: 'abc1@abc.com',
password: '$2a$10$OP52phZ61l2JX2e2TQOu9ubYFBYcPeqEZ92ox2Nyyp5e.MEZk7GhS',
firstName: 'f',
lastName: 'l',
_class: 'com.vilya.farm.domain.model.User',
plots: []
}
]
不包括情节.