在MongoDB中如何只返回数组的一部分?(In MongoDB how to return onl

2019-08-19 08:17发布

考虑集“水果”,其中我有这个文件(我使用Python的pymongo驱动程序,顺便说一句):

{
    '_id'       : 'lemons',
    'weight'    : 58,
    'shape'     : 'oval',
    'countries' : ['Mexico', 'Turkey', 'Argentina', 'SAfrica', 'US']
}

现在,如果我想只拿到了“国家”字段,此查询工作得很好:

In [1]: find_one('lemons', { 'countries' : 1, '_id' : 0 })
Out[1]: {u'countries': [u'Mexico', u'Turkey', u'Argentina', u'SAfrica', u'US']}

但事实证明,我真正需要的只是少数顶级的国家名单,不是所有的人,所以我用,而不是简单的真/ 1“$切片”:

In [239]: c.find_one('lemons', { 'countries' : { '$slice' : [0, 3] }, '_id' : 0 })
Out[239]: 
{u'countries': [u'Mexico', u'Turkey', u'Argentina'],
 u'shape': u'oval',
 u'weight': 58}

那么,国家的数量已经萎缩,但现在它给了我一大堆其他无关的信息!

问:有什么办法可以只显示那些我要求的字段? 另外,一个商家“_id”作为例外是好的,因为这一领域始终呈现,但我不能肯定其他领域,因为MongoDB是计划少,我打算使用此功能,如果需要添加额外的字段。

Answer 1:

您是否尝试过加入另一个包含投影? 我想,你可以添加一些小事类似foo:1(即不是一个真正的字段),它应该工作。

像这样:

{ 'countries' : { '$slice' : [0, 3] }, '_id' : 0, foo : 1 }

如果它不工作,我建议提交与蒙戈的错误。 他们实际上是关于应对臭虫非常好。



Answer 2:

这是奇怪,因为,在蒙戈控制台上运行时不是行为。

您是否尝试过把'lemons'在大括号所以它是有效的JSON语法?

find_one({'_id':'lemons'}, { 'countries' : 1, '_id' : 0 })

它看起来对我来说,它的应用您$切片投影到所有的领域,所以它可能是一些奇怪的语法问题与pymongo司机



文章来源: In MongoDB how to return only part of array?