utilizo documento siguiente esquema:
//User Document
{
"_id": "0610457c-b25b-4e73-b859-11987a3fe271",
"FirstName": "Some Name",
"LastName": "surname",
// it is array of ledger items
"LedgerBook": [
{
"AccountId": "aadfgdf6319d3-1a12-4575-9776-c6653sdfg5c32527",
"TransactionId": "ef98bbc4-3efb-46dc-b632-5adfgdfg1fcc378446",
....
},
...
]
y cuando intento de aplicar consulta db.users.find({ "LedgerBook" : { "$type" : 4 } }).limit(50);
no devuelve nada, pero para consulta db.users.find({ "LedgerBook" : { "$type" : 3 } }).limit(50);
funciona bien (todos los documentos que tiene Artículos de LedgerBook).
¿Por qué sucede?
type = 4 es Array y type = 3 is Object.
Quiero obtener todos los documentos que tengan al menos un elemento LedgerBook.
La primera consulta del comportamiento parece extraña para mí. ¿Cómo puedo verificar el tipo de LedgerBook dentro del documento principal? También @Andrei quiere que todos los documentos que contienen LedgerBook con elementos cuenten más de 1. Pero su segunda consulta devuelve todos los documentos que contienen LedgerBook (incluso si los elementos de la matriz cuentan igual a 0). –
Así es como funcionan las consultas contra las matrices. Puede parecer extraño, pero la mayoría de las veces es exactamente lo que quieres. Para probar una matriz LedgerBook con 1 o más entradas, debe usar una cláusula $ where: –
> db.items.find ({$ donde: función() {devuelva esta.instanciaLedgerBook de Array && this.LedgerBook.length > 0;}}) –