无法投影位于多个3元素字典mongodb

时间:2019-03-28 01:52:41

标签: arrays database mongodb mongodb-query aggregation-framework

{
      "_id" : ObjectId("5c9a31db04a2862329550467"),
    "colors" : 
    [
                {
                        "color" : "(255, 254, 255)",
                        "value" : 2,
                        "returnValue" : 2
                },
                ...,
        ],
        "artist" : "Tosa Mitsuoki",
        "date" : NaN,
        "genre" : "mythological painting",
        "style" : "Yamato-e",
        "title" : "Night March of a Hundred Demons (left half)",
        "fileName" : "colorsearch/img/29855.jpg"
}
db.art_data_full.aggregate(  { 
    "$match" : { 
        "colors.color" : "(0, 0, 0)" 
    } 
}, { 
    "$project": {
        "_id" : 1,
        "fileName": 1, 
        "artist" : 1, 
        "date": 1, 
        "genre": 1, 
        "style": 1, 
        "title" : 1, 
        "colors.returnValue" : 1
    } 
}, { 
    "$sort" : { 
        "colors.value" : -1
    } 
});

返回colors.value中的$project字段时遇到问题。

当前将mongodb和pymongo与django前端一起使用。

“颜色”字段的大小非常大,因为它存储了使用PIL获得的图像中每个像素的rgb值。

  • colors.color值是rgb值字符串
  • colors.value值是图片中出现次数的计数
  • colors.returnValue值是值的副本

我尝试了不同的数据结构方式,但仍在获取错误:

  

“排序超出了内存限制,达到104857600字节,但未选择>进行外部排序。正在中止操作。传递allowDiskUse:true来选择加入。”

最初,只有“颜色”和“值”,我会得到一个错误,并认为这是因为colors.value是排序字段并引起了问题。

我的想法是将“值”复制到“ returnValue”中,并使用项目获取returnValue并使用值进行排序,但这仍然会导致相同的问题。

如果我只留下colors.returnValue,则查询效果很好,但是我真的很想返回计数以显示在前端。

当前,我正在使用一个键,我尝试了多种组合,这似乎效果很好。

[
        {
                "v" : 2,
                "key" : {
                        "_id" : 1
                },
                "name" : "_id_",
                "ns" : "art-data.art_data_full"
        },
        {
                "v" : 2,
                "key" : {
                        "colors.color" : -1,
                        "colors.value" : -1
                },
                "name" : "colors.color_-1_colors.value_-1",
                "ns" : "art-data.art_data_full"
        }
]

我不确定allowDiskUse对于解决此问题是否有用。

之前在其他迭代中已经尝试过,它要么仍然给出错误,使mongodb服务器崩溃,要么查询时间过长。

可能需要错误的方式使用它,只是需要一些帮助。

我觉得我已经接近了,但是缺少了一些东西。我搜索了多种途径进行重组等,但是我需要一些帮助。

0 个答案:

没有答案