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

Làm cách nào để chỉ trả về lần xuất hiện đầu tiên của một ID với Mongoose?

Chúng ta có thể sử dụng khung tổng hợp để làm điều này. Trước tiên, chúng ta cần $sort bởi user và "_id". Từ đó, chúng tôi $group bởi "người dùng" và sử dụng $last toán tử tích lũy để trả về tài liệu cuối cùng cho mỗi người dùng. Lưu ý rằng chúng tôi cũng có thể sử dụng $first toán tử tích lũy nếu chúng tôi sắp xếp tài liệu của mình theo thứ tự giảm dần, nhưng sắp xếp theo thứ tự tăng dần và sử dụng $last làm cho ý định của chúng tôi rõ ràng.

db.collection.aggregate([
    { "$sort": { "user": 1, "_id": -1 } }, 
    { "$group": { 
        "_id": "$user", 
        "user": { "$last": "$$ROOT" } 
    }} 
])

nơi sản xuất:

{
    "_id" : "fje93jrg4",
    "user" : {
        "_id" : 2,
        "user" : "fje93jrg4",
        "event" : null,
        "group" : null,
        "name" : "Bob",
        "text" : "Testing"
    }
}
{
    "_id" : "94fg844f",
    "user" : {
        "_id" : 1,
        "user" : "94fg844f",
        "event" : null,
        "group" : null,
        "name" : "Jake",
        "text" : "Hello world"
    }
}
{
    "_id" : null,
    "user" : {
        "_id" : 4,
        "user" : null,
        "event" : "d0j3n9fn3",
        "group" : null,
        "name" : "My Event",
        "text" : "Testing 2"
    }
}

Chúng tôi có thể muốn thêm một $project cho đường ống của chúng tôi nhưng làm như vậy sẽ gây ra giảm hiệu suất. Tuy nhiên, nó sẽ giảm cả lượng dữ liệu được gửi qua dây cũng như thời gian và bộ nhớ được sử dụng để giải mã tài liệu ở phía máy khách nếu không cần tất cả các cặp khóa / giá trị trong tài liệu được trả về.

$project sân khấu trông như thế này:

{ "$project": {
    "_id": "$user._id",
    "user": "$user.user",
    "event": "$user.event",
    "group": "$user.group",
    "name": "$user.name",
    "text": "$user.text"
}}


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Sử dụng các hàm JavaScript được lưu trữ trong đường dẫn Tổng hợp, MapReduce hoặc runCommand

  2. xử lý @ trong chuỗi kết nối mongodb

  3. Lỗi khi tải tệp cấu hình YAML trong Rails

  4. Các phương pháp hay nhất để bảo mật MongoDB

  5. Lời khuyên về việc di chuyển từ MongoMapper sang Mongoid?