我们的(edX)原始Mongo持久性表示使用bson字典(aka对象或子文档)作为_id
值(请参阅mongo/base.py)。此ID缺少字段。
_id
值是否比其他文档的子字段更多而没有完全搞砸索引?”_id
格式进行查询,如果失败则无法查询新字段?尝试在一个查询中使用新的_id
格式进行查询?更具体地说,当前格式是
{'_id': {
'tag': 'i4x', // yeah, it's always this fixed value
'org': your_school_x,
'course': a_catalog_number,
'category': the_xblock_type,
'name': uniquifier_within_course
}}
我需要添加'run': the_session_or_term_for_course_run
或'course_id': org/course/run
。
答案 0 :(得分:2)
集合中的文档不需要具有相同结构的_id值。因此,在集合中包含以下文档是完全可以接受的:
> db.foo.find()
{ "_id" : { "a" : 1 } }
{ "_id" : { "a" : 1, "b" : 2 } }
{ "_id" : { "c" : 1, "b" : 2 } }
请注意,因为索引仅在_id上,所以只有指定_id值的查询才会使用索引:
db.foo.find({_id:1}) // will use the index on _id
db.foo.find({_id:{state:"Alaska"}) // will use the index on _id
db.foo.find({"_id.a":1}) // will NOT use the index on _id
另请注意,只有_id的“值”的完全匹配才会返回文档。因此,这不会返回上述集合的文档:
db.foo.find({_id:{c:1}})
因此,对于您的情况,欢迎您向对象添加字段,该字段是_id键的值。并且所有文档都具有不同的结构并不重要。但是,如果您希望查询集合by_id并使其高效,则需要为可能单独使用的所有相关子部件添加索引。这不是超级有效的。
_id与此方面的任何其他关键词没有什么不同。