如何使用DBRef查询mongodb

问题描述

| 假设我具有以下数据结构:
var user = {_id: \'foo\',age: 35};
var post = {_id: \'...\',author: {$ref: user,$id: \'foo\'},...};
如何查询所有引用user [foo]的帖子?我尝试了以下操作,但不起作用:
db.post.find(\'author._id\': \'foo\');
var u = db.user.find({_id: \'foo\'});
db.post.find(\'author\': u);
我也无法从官方文档和Google中找到答案! 有人知道吗?     

解决方法

        得到它了:
db.post.find({\'author.$id\': \'foo\'})
    ,        您可以使用。$ id引用,但它将忽略这些字段上的任何索引。 我建议您忽略该方法,除非您直接通过终端查询该方法或想要快速查找某些内容。在使用大型集合时,您将需要为字段建立索引并使用以下方法对其进行查询。 如果要通过以下方式使用索引查询:
db.post.find(\'author\' : { \"$ref\" : \'user\',\"$id\" : \'foo\',\"$db\" :\'database_name\' })
如果foo是对象ID
db.post.find(\'author\' : { \"$ref\" : \'user\',\"$id\" : ObjectId(\'foo\'),\"$db\" :\'database_name\' })
您可以通过以下方式在作者上创建索引
db.post.ensureIndex( {\'author\' : 1 } );
    ,        这个
db.post.find(\'author.$id\': \'foo\')
缺少
{}
,因此正确的句子是:
db.post.find({\'author.$id\': \'foo\'})
也可以通过以下方式实现:
db.post.find({\'author\': DBRef(\"user\",ObjectId(\'foo\'))})
但是是更紧凑和实用的第一种方式。     ,        对于任何正在寻找Java解决方案的人,那么如果您使用mongojack,它的确很简单:
collection.find(DBQuery.is(\"user\",new DBRef(user.getId(),User.class)));
其中collection是JacksonDBCollection。     ,        在mongoengine中,您应该只使用引用对象的实例。它应该设置了ID。 假设作者是Author文档实例。所以使用这个:
Post.objects(author__eq=author)
您可以浏览该作者的所有帖子。 Post.author应该定义为ReferenceField     ,        使用Mongo 2.4.1版本 这是您在命令行中进行OLA收集的方法,其中
@DBRef dbrefName
db.OLA.find({\"dbrefName.someFieldValue\" : \"Personal\"});
确切查询
db.OLA.find({\"dbrefName.$id\" : ObjectId(\"1234\")});