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

Có thể nhận được một lát cắt trong Mongo?

Bạn cần sử dụng đường dẫn tổng hợp để đạt được $slice chuỗi, do những hạn chế trong câu lệnh dự án là một phần của truy vấn tìm.

Truy vấn dưới đây không hợp lệ vì $slice đầu tiên sẽ trả về một mảng, thay vì chỉ mục và việc thực thi $slice có phạm vi bên ngoài không thành công.

db.collection.find({"name":"foo"},{text: {$slice:[{$slice: [1,1]}]}})

Hơn nữa, không có cách nào để làm việc trên một trường dự kiến ​​trong cùng một câu lệnh dự án, nếu có thể, chúng tôi có thể sửa đổi thêm văn bản bằng cách áp dụng một lát $ cho nó.

Cách đi sẽ là:

  • Match bản ghi có tên là foo.
  • Unwind mảng văn bản để lên cấp độ đầu tiên.
  • Unwind một lần nữa để đạt đến cấp độ mà chúng tôi muốn.
  • Group các bản ghi lại với nhau theo tên.
  • Project bản ghi cuối cùng trong nhóm cũng là phần tử cuối cùng của mảng lồng nhau cuối cùng.

Mã:

db.collection.aggregate([
{$match:{"name":"foo"}},
{$unwind:"$text"},
{$unwind:"$text"},
{$group:{"_id":"$name","text":{$last:"$text"}}},
{$project:{"name":"$_id","text":1}}
])

hoặc nếu bạn muốn chiếu một phần tử xuất hiện theo một thứ tự cụ thể, thì bạn có thể sử dụng $skip$limit hoạt động để đạt được điều này.

var orderOfElement = 2;
db.collection.aggregate([
{$match:{"name":"foo"}},
{$unwind:"$text"},
{$unwind:"$text"},
{$skip:orderOfElement -1},
{$limit:1}
])

Chiếu phần tử thứ hai theo thứ tự trong các mảng lồng nhau.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Cách lấy db.currentOp () từ trình điều khiển C # - mongodb

  2. Node.js - Mongoose - Kiểm tra xem bộ sưu tập có tồn tại không

  3. Kết nối liên tục hoặc tổng hợp kết nối trong PHP54 + Nginx + PHPFPM + MongoDB

  4. Sử dụng mongodb bên ngoài với sự phát triển sao băng

  5. Điều đó có nghĩa là gì để phù hợp với bộ làm việc vào RAM cho MongoDB?