我一直在寻找答案,但无法在任何地方找到答案。
当我在robomongo中使用以下方法来检索符合条件的文档的嵌入字段时,我得到一个列表所有匹配的文档。 所有这些文档都包含我选择的嵌入字段的文档数组。
db.getCollection('test').find(
{ "bom.COMPONENT": "101-00001-017" },
{ _id: 0, "CicodeList.Cicode": 1 }
)
结果
/* 1 */
{
"CicodeList" : [
{
"Cicode" : "one"
}
]
}
/* 2 */
{
"CicodeList" : [
{
"Cicode" : "two"
}
]
}
/* 3 */
{
"CicodeList" : [
{
"Cicode" : "three"
}
]
}
我想得到的是一个包含所有文档的所有嵌入字段的单个数组,如下所示:
{ results: ["one", "two", "three"] }
原始文件看起来有点像这样
/* 1 */
{
"_id" : ObjectId("583df12093181938d03c50eb"),
"CicodeList" : [
{
"Cicode" : "one"
},
{
"Cicode" : "two"
}
],
"bom" : [
{
"COMPONENT" : "101-00001-017"
},
{
"COMPONENT" : "101-00008-002"
}
]
}
/* 2 */
{
"_id" : ObjectId("583df12193181938d03c50ec"),
"CicodeList" : [
{
"Cicode" : "three"
},
{
"Cicode" : "four"
}
],
"bom" : [
{
"COMPONENT" : "101-00001-017"
},
{
"COMPONENT" : "101-00008-002"
}
]
}
答案 0 :(得分:0)
我建议使用aggregation框架
的以下查询db.test.aggregate([
{
$match : { "bom.COMPONENT": "101-00001-017" }
},
{
$unwind: {
path: "$CicodeList"
}
},
{
$group: {
"_id": null,
"results": { $push: "$CicodeList.Cicode" }
}
}
])
它会打印出所有已存在的Cicode值,因为“bom.COMPONENT”等于“101-00001-017”
{"results" : [ "one", "two", "three", "four" ]}
答案 1 :(得分:0)
您只需在嵌入字段上运行 distinct
方法,如下所示
db.getCollection('test').distinct("CicodeList.Cicode",
{ "bom.COMPONENT": "101-00001-017" } /* query */
)
<强>结果强>
/* 1 */
[
"one",
"two",
"three"
]