with query inside cross collection reference mongodb dbref

reference - inside - mongodb relational query



Cómo consultar mongodb con DBRef (6)

En mongoengine solo debes usar la instancia del objeto al que se hace referencia. Debería tener el ID establecido. Supongamos que el autor es la instancia del documento Autor. Entonces usando esto:

Post.objects(author__eq=author)

Puedes revisar todas las publicaciones de este autor. Post.author se debe definir como ReferenceField

supongamos que tengo la siguiente estructura de datos:

var user = {_id: ''foo'', age: 35}; var post = {_id: ''...'', author: {$ref: user, $id: ''foo''},...};

¿Cómo puedo consultar todas las publicaciones que hacen referencia al usuario [foo]? Intenté lo siguiente pero no funcionó:

db.post.find(''author._id'': ''foo''); var u = db.user.find({_id: ''foo''}); db.post.find(''author'': u);

tampoco puedo encontrar la respuesta del documento oficial y google!

Alguien tiene alguna idea?


Este db.post.find(''author.$id'': ''foo'') tiene {} , por lo que la oración correcta es:

db.post.find({''author.$id'': ''foo''})

También esto se puede lograr con:

db.post.find({''author'': DBRef("user", ObjectId(''foo''))})

Pero es más compacto y práctico de la primera manera.


Lo tengo:

db.post.find({''author.$id'': ''foo''})


Para cualquiera que busque una solución Java para esto, entonces si está usando mongojack es realmente fácil:

collection.find(DBQuery.is("user", new DBRef(user.getId(), User.class)));

Donde colección es JacksonDBCollection.


Puede usar la referencia. $ Id pero ignorará cualquier índice en esos campos. Sugeriría ignorar ese método a menos que lo esté consultando directamente a través del terminal o quiera buscar algo rápidamente. Al usar colecciones grandes, querrá indexar el campo y consultarlo utilizando el siguiente método.

Si desea usar una consulta de índice usando lo siguiente:

db.post.find(''author'' : { "$ref" : ''user'', "$id" : ''foo'' , "$db" :''database_name'' })

Si foo es un id de objeto

db.post.find(''author'' : { "$ref" : ''user'', "$id" : ObjectId(''foo'') , "$db" :''database_name'' })

Puede crear un índice sobre el autor por

db.post.ensureIndex( {''author'' : 1 } );


Usando la versión Mongo 2.4.1

Así es como lo haces en la línea de comandos para la colección OLA donde @DBRef dbrefName

db.OLA.find({"dbrefName.someFieldValue" : "Personal"});

Consulta exacta

db.OLA.find({"dbrefName.$id" : ObjectId("1234")});