我有大约5万个包含许多字段的文档,但此问题的重要文档如下:
"_id": ObjectId(""),
...
"item": "apple"
"properties" : [
{
"color": "red",
"size" : "L",
"status": "eatable"
}
],
...
我试图打印看起来像item+";"+properties.color的行,同时保留我所拥有数据的完整性,并仅为某些文档打印这些字段.目前,我唯一成功的事情就是仅打印物品或整个数组"属性",但我无法同时获取这两个属性,也无法同时获取 colored颜色 .
db.getCollection("foods").find({properties:{$elemMatch:{color: {$in:["red", "green", "orange", "blue"]}}}})
.aggregate([
{ $unwind: {path:"$properties", preserveNullAndEmptyArrays: true}},
]).forEach(function(row){
if(row.properties !== undefined) print (row.item + ";" + row.properties.color) })
由于在聚合之前进行查找,这会出现错误,但我真的不知道还能如何创建它,以便它只为符合该条件的行打印这个(而且我也不知道$unclown是否会扰乱我的数据中的数组,或者它是否只是函数运行时的临时"分离").
我现在正在运行的只是这些项目:
db.getCollection("foods").find({properties:{$elemMatch:{color: {$in:["red", "green", "orange", "blue"]}}}})
.forEach(
function(row){
print (row.item)
}
)
通过将row. entry更改为row.properties,我打印了完整的数组,但之后添加.Color没有任何作用.