【发布时间】:2018-04-16 20:50:34
【问题描述】:
这是我的文档结构:
db.like
{
_id: objectid, /* not null */
id_from: int64, /* not null */
id_to: int64, /* not null */
date: datetime, /* default NOW not null */
}
db.like.createIndex( {"id_to": 1, "id_from": 1}, {unique: true} );
db.like.createIndex( {"id_to": 1, "date": -1}, {unique: false} );
我仅通过以下方式之一加载文档:
db.like.find({$and: [{id_to:xxx}, {id_from:yyyy}]})
或
db.like.find({id_to:xxx}).sort({date:-1});
后来我像这样对集合进行分片:
sh.shardCollection( "like", {"id_to": 1, "id_from": 1}, unique: true );
如您所见,我根本不使用"_id" 上的索引。我有点担心"_id" 上的索引会无用。他们是优化我的架构的一种方式,还是更好地保持这种方式?
注意:该解决方案必须与 sharding 一起使用,因此 clcto seam 给出的解决方案对此不利!它的解决方案是将 _id 声明为如下文档:
{
_id : {
to : int64,
from : int64
},
date : datetime
}
但我很确定像这样的声明查询
db.like.find({id_to:xxx}).sort({date:-1});
将在所有分片上完成
【问题讨论】:
-
Mongo 的设计使得每个文档都需要有一个唯一的 id,这是由
_id上的唯一索引来保证的。 AFAIK,您无法删除它,但您可以设置您的文档,以便_id是包含id_to和id_from的文档,因为提供的代码保证是唯一的。 -
@clcto :谢谢,但是如何将 _id 设置为包含 id_to 和 id_from 的文档,同时保持我的 2 个查询性能?
标签: mongodb mongodb-query mongodb-indexes