所以我对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")
Run Code Online (Sandbox Code Playgroud)
}
如何使用Node.js和MongoDB(我使用的是mongoose驱动程序)获得每个不同所有者值的列表(数组).在mongoside或node.js方面做得更好吗?例如,如果我在上一个表上运行该函数,它应该返回:
[
{
"owner":"MERCHAND_1"
},
{
"owner":"MERCHAND_2"
}
]
Run Code Online (Sandbox Code Playgroud)
Joh*_*yHK 11
MongoDB支持一个不同的命令来执行此操作.您可以使用点表示法来定位数组中的字段,如本例所示.在shell中:
db.test.distinct('actions.owner')
Run Code Online (Sandbox Code Playgroud)
输出:
[
"MERCHAND_1",
"MERCHAND_2"
]
Run Code Online (Sandbox Code Playgroud)
您可以使用该命令使用MongoDB执行此操作
db.runCommand({
distinct: 'tests',
key: 'actions.owner'
});
Run Code Online (Sandbox Code Playgroud)
给你的
{
"values" : [
"MERCHAND_1",
"MERCHAND_2"
],
"stats" : {...},
"ok" : 1
}
Run Code Online (Sandbox Code Playgroud)
这将包括tests集合中的每个文档.但是,如果您只想检查单个文档,则可以重新编写该命令
db.runCommand({
distinct: 'tests',
key: 'actions.owner',
query: { _id: ObjectId("528c731a810761651c00000f") }
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4697 次 |
| 最近记录: |