考虑到几个集体:
1.-用户
{
name: ...
id: ...
city: ...
age: ...
otherdata: ...
}
2.- PETS
{
name: ...
owner: ...
type: ...
age: ...
}
我尝试使用$ lookup汇总来构建一组代表用户及其宠物的对象:
collectionusers.aggregate([
{
$lookup: {
from: "pets",
localField: "id",
foreignField: "owner",
as: "pets"
}
}
]);
但是我想添加一个过滤器,以便只为每个用户添加1年以上的宠物(使用宠物对象内的字段年龄)。
问题是,在聚合中添加$ match不起作用,因为它会过滤掉没有旧宠物的用户,我希望用户即使没有宠物也能在那里。
实际上,我也试图以同样的方式只获得每个用户中最老的宠物,而且我也找不到公式。
在聚合中执行此操作的任何方法?
当然,目前我正在返回的对象上进行此操作。
提前致谢。
答案 0 :(得分:9)
您可以在<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
阶段生成的pets
数组上使用$filter
数组聚合运算符。
要输出1岁以上的宠物,请使用
$lookup
要输出最旧的宠物,只需使用
替换上一个聚合管道中db.users.aggregate([
{
$lookup:
{
from: "pets",
localField: "id",
foreignField: "owner",
as: "pets"
}
},
{
$project:
{
name: 1,
pets:
{
$filter:
{
input: "$pets",
as: "pet",
cond: { $gte: [ "$$pet.age", 1 ] }
}
}
}
}
]);
运算符的cond
字段
$filter