在MongoDB&;中获取字段所有值的最有效方法;Node.js

在MongoDB&;中获取字段所有值的最有效方法;Node.js,node.js,mongodb,Node.js,Mongodb,所以我对MongoDB和文档存储非常陌生。我很难找到最优雅、最有效的解决方案来完成以下工作: 我有一个叫做测试的集合。在每个测试中,都有一个字段所有者的操作。见下文: { "_id" : ObjectId("528c731a810761651c00000f"), "actions" : [ { "action" : "6784", "owner" : "MERCHAND_1", "_id" : ObjectId("528c729281076

所以我对MongoDB和文档存储非常陌生。我很难找到最优雅、最有效的解决方案来完成以下工作:

我有一个叫做测试的集合。在每个测试中,都有一个字段所有者的操作。见下文:

{
"_id" : ObjectId("528c731a810761651c00000f"),
"actions" : [
    {
        "action" : "6784",
        "owner" : "MERCHAND_1",
        "_id" : ObjectId("528c7292810761651c00000e")
    },
    {
        "action" : "1",
        "owner" : "MERCHAND_1",
        "_id" : ObjectId("528c7292810761651c00000d")
    },
    {
        "action" : "1358",
        "owner" : "MERCHAND_2",
        "_id" : ObjectId("528c7292810761651c00000c")
    }
],
"name" : "Test 1",
"product" : ObjectId("528bc4b3a0f5430812000010")
}

如何使用Node.js和MongoDB(我使用的是mongoose驱动程序)获得每个不同所有者值的列表(数组)。在mongoside或node.js端进行比较好吗?例如,如果我在上一个表上运行函数,它应该返回:

[
    {
      "owner":"MERCHAND_1"
    },
    {
      "owner":"MERCHAND_2"
    }
]
MongoDB支持执行此操作的命令。在本例中,您可以使用点表示法将数组中的字段作为目标。在外壳中:

db.test.distinct('actions.owner')
产出:

[
  "MERCHAND_1",
  "MERCHAND_2"
]

您可以使用以下命令对MongoDB执行此操作

db.runCommand({
  distinct: 'tests',
  key: 'actions.owner'
});
这给了你

{
  "values" : [
    "MERCHAND_1",
    "MERCHAND_2"
  ],
  "stats" : {...},
  "ok" : 1
}
这将包括
测试
集合中的每个文档。但是,如果您只想检查单个文档,则可以将命令重新编写为

db.runCommand({
  distinct: 'tests',
  key: 'actions.owner',
  query: { _id: ObjectId("528c731a810761651c00000f") }
});

谢谢你,我只想知道这些。runCommand和直接调用distinct函数有什么区别?
db.collection.distinct()
方法为
distinct
命令提供了一个包装器。它实际上是在后台调用命令,但不返回
stats
ok
属性。