web-dev-qa-db-fra.com

Taille du tableau d'agrégation Mongodb supérieure à la correspondance

J'ai une collection où les investissements sont un tableau à l'intérieur du document mongodb. Maintenant, en utilisant l'agrégation, j'essaie de filtrer les résultats lorsque la longueur des investissements est plus de 5 fois, puis de faire le prochain traitement à l'aide de la requête de correspondance.

 Collection{
 _id:000000
 --------------------- 
 "investments" : [      {
          hhhhhhhhhhhhhh 
         },
         {
           hhhhhhhhhhhhhh 
          } }]
-----------------

La requête de correspondance que j'ai écrite comme ci-dessous ne fonctionne pas. Aucune suggestion:

db.companies.aggregate( [
    { $match:  {"founded_year" : 2004}, 
  {  "investments" : {$size: : { $gte: 5 } } }  },
----------------------------------
--------------------------------
]}
5
Pinaki Mukherjee

Avec aggregate:

db.companies.aggregate([
  { $match:  { "founded_year":2004 } },
  { $project: { founded_year:1,  
                moreThanFive: { $gt: [ {$size: "$external_links" }, 5 ] } } },
  { $match: { moreThanFive : true }} ,
])

Tu devras:
1. Inclure un $project stage, pour trouver le nombre d'investissements (le size du tableau), et vérifier s'il est supérieur à 5.
2. puis faites un autre $match stage pour filtrer ceux avec moreThanFive est égal à true.

Avec find:

db.companies.find({'investments.5': {$exists: true}})

Vous demandez si le numéro de position 6 dans le tableau investments existe.

13
Alejandro Montilla