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

Làm cách nào để bạn truy cập một mục mảng cụ thể trong tập hợp phép chiếu MongoDB?

Chưa có tính năng giúp bạn đạt được điều này. Tuy nhiên, sẽ có một toán tử tổng hợp mới cung cấp một phần tử mảng cho một chỉ mục nhất định. Biểu thức mới được gọi là $arrayElemAt

Sử dụng toán tử tổng hợp mới có sẵn cho các phiên bản MongoDB 3.2.X và lớn hơn, nó trả về một phần tử mảng cho một chỉ mục nhất định. Biểu thức mới được gọi là $arrayElemAt . Nó nhận hai đối số, một mảng và một chỉ mục và trả về phần tử tại chỉ số đã cho trong mảng. Các chỉ số phủ định được chấp nhận là các chỉ mục từ phía sau của mảng. Nếu chỉ mục nằm ngoài giới hạn, nó sẽ trả về giá trị bị thiếu, có nghĩa là trường sẽ không tồn tại trong đầu ra:

var pipeline = [    
    { $match : {"geo" : {$ne: null}}},
    {
        $project: {
            _id: "$id_str", 
            lat: { $arrayElemAt: ['$geo.coordinates', 0] },
            lon: { $arrayElemAt: ['$geo.coordinates', 1] }
        }
    }
];

Như một giải pháp thay thế hiện tại (giả sử mảng tọa độ sẽ luôn có hai phần tử tại bất kỳ thời điểm nào), bạn có thể thử đường dẫn tổng hợp sau đây sẽ tận dụng lợi thế của $first $last toán tử bộ tích lũy nhóm để lấy các phần tử sau $sort :

var pipeline = [
    {$match : {"geo" : {$ne: null}}},
    { "$unwind": "$geo.coordinates" },
    { "$sort": {"geo.coordinates": 1} } ,
    {
        "$group": {
            "_id": "$_id",
            "lat": { "$first": "$geo.coordinates" },
            "lon": { "$last": "$geo.coordinates" }
        }
    }
];


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Mongodb lấy bộ đếm 3 byte từ ObjectId

  2. MongoDB sử dụng COLLSCAN khi chỉ trả về _id

  3. React Native - không thể nhập mongoose trên giao diện người dùng (nhưng nó hoạt động từ phần phụ trợ)

  4. loại bỏ các giá trị 0 nếu 0 được theo sau bởi> =1 khỏi các mảng trong MongoDB

  5. ứng dụng sao băng của tôi có cần cả MONGO_OPLOG_URL và MONGO_URL không