MongoDB
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> MongoDB

MongoDB sắp xếp tài liệu theo các phần tử mảng

Bạn không thể làm điều đó với mảng và vấn đề chính ở đây là vì bạn muốn "sắp xếp" xảy ra trên phần tử đã so khớp. Nếu bạn muốn sắp xếp các kết quả như thế này thì bạn cần sử dụng .aggregate() thay thế. Hoặc là:

Đối với các phiên bản MongoDB hiện đại:

db.maps.aggregate([
    { "$match": { "points.type": "type1" }},
    { "$addFields": {
        "order": {
            "$filter": {
              "input": "$points",
              "as": "p",
              "cond": { "$eq": [ "$$p.type", "type1" ] }
            }
        }
    }},
    { "$sort": { "order": 1 } }
])

Đối với MongoDB 2.6 đến 3.0

db.maps.aggregate([
   { $match: { 'points.type': 'type1' } },
    {
     $project: {
       points: {
        $setDifference: [
          {
            $map: {
              input: '$points',
              as: 'p',
              in: {
                $cond: [
                  { $eq: ['$$p.type', 'type1'] },
                  '$$p',
                  false,
                ]
              }
            }
          },
          [false]
        ]
      }
    }
  },
  { $sort: { 'points.distanceToSpawn': 1 } },
]);

Hoặc kém hiệu quả hơn trong các phiên bản trước MongoDB 2.6:

db.maps.aggregate([
    { "$match": { "points.type": "type1" }},
    { "$unwind": "$points" },
    { "$match": { "points.type": "type1" }},
    { "$group": {
        "_id": "$_id",
        "points": { "$push": "$points" }
    }},
    { "$sort": { "points.ditanceToSpawn": 1 } }         
])

Đó là cách duy nhất để so khớp các phần tử chính xác và xem xét chúng trong một phép toán "sắp xếp". Thay vào đó, sắp xếp con trỏ mặc định sẽ xem xét các giá trị cho trường trong các phần tử mảng không khớp với "loại" đã chọn của bạn.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Nhà điều hành đường ống tổng hợp cuối cùng MongoDB $

  2. Làm thế nào để chuyển đổi một chuỗi thành ObjectId trong trình điều khiển gốc nodejs mongodb?

  3. Cách thêm dữ liệu vào mảng trong Mongoose Schema

  4. Truy vấn MongoDB GridFS?

  5. Toán tử tổng hợp MongoDB cho các phần ngày trả lại