MongoDB / Morphia-投影不适用于递归对象?

埃迪·伯恩(Edy Bourne)

我有一个测试对象,它充当树上的节点,包含0个或多个相同类型的子实例。我将其保留在MongoDB上,并使用Morphia对其进行查询。

我执行以下查询:

db.TestObject.find( {}, { _id: 1, childrenTestObjects: 1 } ).limit(6).sort( {_id: 1 } ).pretty();

结果是:

{ "_id" : NumberLong(1) }
{ "_id" : NumberLong(2) }
{ "_id" : NumberLong(3) }
{ "_id" : NumberLong(4) }
{
        "_id" : NumberLong(5),
        "childrenTestObjects" : [
                {
                        "stringValue" : "6eb887126d24e8f1cd8ad5033482c781",
                        "creationDate" : ISODate("1997-05-24T00:00:00Z")
                        "childrenTestObjects" : [
                                {
                                        "stringValue" : "2ab8f86410b4f3bdcc747699295eb5a4",
                                        "creationDate" : ISODate("2024-10-10T00:00:00Z"),
                                        "_id" : NumberLong(7)
                                }
                        ],
                        "_id" : NumberLong(6)
                }
        ]
}

太棒了,但也有些令人惊讶。我的结果有两个问题:

1)当我进行投影时,它仅适用于顶部元素。子元素仍然返回投影中未包含的其他属性(stringValue和creationDate)。我希望字段选择适用于相同类型的所有文档和子文档。这棵树的子项目数较少,因此无法在查询中明确指定。如何做到这一点?

2)令我惊讶的是,限制适用于子文档!您看到有一个ID为6的嵌入式文档。我本来希望看到6个具有N个子文档的顶级文档,但实际上只有5个。如何告诉MongoDB返回6个顶级元素,无论它们中嵌入了什么?没有它,就不可能有一个一致的分​​页系统。

您的所有帮助使学习MongoDB的方式变得更快,我对此表示非常感谢!谢谢!

逃避地

至于1),投影会保留结果中的字段。在这种情况下,该字段childrenTestObjects恰好是文档。因此,mongo返回该整个字段,这当然是整个子文档。投影不是递归的,因此您必须显式指定每个字段。

至于2),这听起来不对。这将有助于查看查询结果而无需添加投影(每个返回文档中的完整文档),我们可以从那里获取。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章