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

所以我对MongoDB和文档存储的东西很陌生。 我很难find最优雅和有效的解决scheme来做到以下几点:

我有一个名为testing的集合。 在每个testing中都有一个现场所有者的行为。 见下文:

{ "_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.runCommand({ distinct: 'tests', key: 'actions.owner' }); 

这给你

 { "values" : [ "MERCHAND_1", "MERCHAND_2" ], "stats" : {...}, "ok" : 1 } 

这将包括tests集合中的每个文档。 但是,如果您只想检查单个文档,则可以重新编写该命令

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

MongoDB支持一个独特的命令来做到这一点。 在这种情况下,可以使用点符号来定位数组中的字段。 在shell中:

 db.test.distinct('actions.owner') 

输出:

 [ "MERCHAND_1", "MERCHAND_2" ]