如何在MongoDB集合中存储描述文档的元数据?

13
什么是在MongoDB中存储描述集合的元数据的最佳方法?
我有一个包含任意数量和可变数量文档的集合。在创建新文档时,我想根据当前集合中文档的数量分配一个新的临时名称(字符串),例如“ Doc 1”,“ Doc 2”等。由于文档可以被删除,只计算count()将不会产生有用的结果。
其中一种选择是在不同的集合中存储描述集合的元数据,但这似乎很笨拙。
由于Mongo是无模式的,我可以将集合的元数据保存在集合本身中,可能在名为“ metadata”的文档中。在这种情况下,如何快速访问该文档?是否需要为“ metadata”构建索引以立即访问它,而不需要O(n)搜索时间?
是否有比我在上一段中描述的更标准或更简单的方法? 我将来可能会有更多的元数据。

为什么不能直接使用添加到每个文档中的唯一 _id 呢?这与顺序计数器一样好,即代理键。 - Aravind Yarram
我完全同意你的观点,已经点赞了。我希望集合本身内置元数据。我们可以类似于“db.collection.Product.setMetadata({ data1: dataValue })”来设置元数据,以及类似于“db.collection.Product.getMetadata()”来获取元数据。 - Alan Souza
2个回答

4
你可以查看这个链接 https://docs.mongodb.com/v3.0/tutorial/create-an-auto-incrementing-field/
根据上面的链接,我的观点是将它们存储在一个名为metadata的集合中,格式为:
{
    '_id':'collection1'
    'c': 0,
    'other metadata1': 'foo',
    'other metadata2': 'bar'
}

然后,您可以根据集合名称获取这些元数据。如果要向此文档添加字段,只需使用$set进行更新。

是的,那个链接暗示着创建一个专门用于元数据的集合是推荐的。听起来有点奇怪...在接受之前我会等待听取其他想法。谢谢。 - ericsoco
你也可以使用存储文档本身的集合来拥有元数据/计数器文档。 - Aravind Yarram
@Pangea,这就是我在问题中描述的内容,但如果我这样做,我需要在某个与元数据文档唯一相关的字段上创建索引,以便能够在常数时间内找到文档,而不是线性查找吗? - ericsoco
如果您想在同一集合中存储元数据,必须在该字段上添加索引。但为了更好的维护,我建议使用一个集合来存储它 :) - Chien-Wei Huang

4
我们通常会将设置、元数据等内容放在一个单独的集合.settings中。例如,如果你的数据存储在集合'user'中,我会把元数据放在'user.settings'中。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接