我有一个关于在MongoDB查找查询中使用投影的问题。我的问题如下,我的文件如下:
{
"_id" : ObjectId("55e59045cded246cb8e8183e"),
"name" : "Acrobatics",
"category" : {
"title" : "Combat",
"key" : "combat"
},
"calculationType" : "Skill",
"statistics" : "INI",
"title" : "Acrobatics"
}
我的汇总查询如下:
db.getCollection('skills').aggregate([
{ $match: { "category.title": "Combat" } },
{ $project: { "_id": 0, "name": 1, "category": "$category.title" } }
]);
结果如您所料:
{
"result" : [
{
"name" : "Acrobatics",
"category" : "Combat"
}
],
"ok" : 1.0000000000000000
}
现在我想使用find方法而不是聚合进行相同的投影,我的查询看起来像:
db.getCollection('skills').find(
{ "category.key": "combat" },
{ "_id": 0, "name": 1, "category": "$category.title" }
);
结果如下:
[{
"name" : "Acrobatics",
"category" : {
"title" : "Combat",
"key" : "combat"
}
}]
正如您在查找中看到的那样,子文档 category 的结果未折叠。我期望与聚合函数相同的形式;减去结果和OK属性。
我做错了吗?或者我的期望是错的?感谢您阅读本文。
答案 0 :(得分:2)
不能使用find()
无法获得完全相同的输出,因为您无法在使用find()
方法时引入新字段。您获得该结果的原因是因为category
是您的集合中的字段名称。 .find()
方法中的投影参数用于从查询结果中明确包含或排除字段,但不会与允许您重新整形文档或包含新计算字段的$project
完全不同在结果中。
例如以下内容:
db.getCollection('skills').find({ "category.key": "combat" }, { "name": 1, "_id": 0, "cat": "$category.title" })
收益率
{ "name" : "Acrobatics" }
因为文档中没有名为cat
的字段。如果您想要的只是标题字段,那么您可以使用:
db.skills.find({ "category.key": "combat" }, { "name": 1, "_id": 0, "category.title": 1 })
返回:
{ "name" : "Acrobatics", "category" : { "title" : "Combat" } }