是否可以从数组中只检索子文档的一个特定字段

本文关键字:一个 字段 文档 数组 检索 是否 | 更新日期: 2023-09-27 17:58:30

假设我在MongoDB集合上有以下文档结构:

{
  "Applications" : [{
      "JoinDate" : new Date("10/2/2013 18:06:30"),
      "Key" : "shtube",
      "Roles" : ["Administrator", "Moderator"]
    }],
  "Comment" : "Cool",
  "ConfirmationKey" : "981c69fe-6fff-47d6-bb82-3b5f1deeef25",
  "CreationDate" : new Date("8/2/2013 17:43:42"),
  ...
} 

如何使用MongoCursor中的SetFields()方法仅检索"角色"字段(针对性能问题)?此时我只知道检索子文档和访问"角色"。但我不需要完整的子文档信息。

是否可以从数组中只检索子文档的一个特定字段

您可以使用投影来提取您想要的字段,使用点表示法(使用shell):

db.myCollection.find({ "Applications.Roles" : { $exists: true } },
             {  "Applications.Roles" : 1 })

在上面的示例中,它只是返回包含应用程序的文档。角色结构。

你可以在这里阅读更多关于投影的信息。

仅供参考:使用LINQ无法有效地从C#进行投影。它在客户端本地进行投影。

另一种选择是使用$elemMatch(然而,在这种情况下,如果您不执行特定查询,它可能不适合您的需求)。