MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

Имената на полетата FieldPath не могат да съдържат '.' когато се опитвате да използвате AGGREGATE

Можете да използвате заявката по-долу

Ако използвате $expr тогава можете лесно да използвате оператор за агрегиране вътре в него. Така че вместо да използвате .dot нотация, за да намерите елемента, можете да използвате $arrayElemAt оператор, който ви предоставя възможността да изберете елемента, който искате.

db.table.aggregate([
  { '$match': {
    '$expr': {
      '$and': [
        { '$eq': [{ '$size': '$events' }, 4] },
        { '$lt': [{ '$arrayElemAt': ['$events.updated', 0] }, '2019-05-05'] }
      ]
    }
  }}
])

Или начина, по който се опитвахте да направите

db.collection.aggregate([
  { "$match": {
    "events.0.updated": { "$lt": "2019-05-05" },
    "$expr": { "$eq": [{ "$size": "$events" }, 4] }
  }}
])

Можете да проверите $expr поведение тук




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDB:Извличане само на документи, създадени през последните 24 часа?

  2. създаване и актуализиране на множество MongoDB документи в едно обаждане

  3. Спрете Mongoose да създава свойство _id за елементи от масив от поддокумент

  4. в React извиквам два списъка към страница от mongo и искам да щракна върху единия, за да филтрирам това, което се показва в другия

  5. В Mongoose Model.find() и Model.find().exec() дават същия резултат. Така че защо да си правите труда да използвате Model.find().exec()?