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

Sử dụng $ slice với $ regex cùng nhau trên mảng subDocument trong mongodb

Bạn có thể sử dụng kết hợp $ unwind $ match với mongo tổng hợp để có được sản lượng mong đợi như:

db.collection.aggregate({
    $match: {
    "_id": "3691149613248"  // you can skip this condition if not required
    }
}, {
    $unwind: "$following"
}, {
    $match: {
    "following.content_id": {
        $regex: /^369/
    }
    }
}, {
    $group: {
    _id: "$_id",
    "following": {
        $push: "$following"
    }
    }
})

Nếu bạn muốn đăng ký bỏ qua giới hạn đến truy vấn trên thì bạn có thể dễ dàng sử dụng nó như:

db.collection.aggregate({
    $match: {
    "_id": "3691149613248" //use this if you want to filter out by _id
    }
}, {
    $unwind: "$following"
}, {
    $match: {
    "following.content_id": {
        $regex: /^369/
    }
    }
}, {
    $skip: 4  // you can set offset here
}, {
    $limit: 3 // you can set limit here
}, {
    $group: {
    _id: "$_id",
    "following": {
        $push: "$following"
    }
    }
})

CHỈNH SỬA :

Nếu bạn đang sử dụng phiên bản php nhỏ hơn 5.4 thì truy vấn sẽ là:

$search = "369";
$criteria = array(array("$match" => array("_id" => "3691149613248")),
    array("$unwind" => "$following"),
    array("$match" => array("following.content_id" => array("$regex" => new MongoRegex("/^$search/")))),
    array("$skip" => 4), array("$limit" => 3),
    array("$group" => array("_id" => "$_id", "following" => array("$push" => "$following"))));
$collection - > aggregate($criteria);

Nếu bạn đang sử dụng phiên bản PHP lớn hơn 5.3 thì chỉ cần thay thế {} dấu ngoặc nhọn với [] tương ứng.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Cách hợp nhất trường mảng trong tài liệu trong tổng hợp Mongo

  2. Mongodb và Express

  3. MongoDB:Cách tìm tài liệu theo id bên trong tài liệu lồng nhau

  4. Lấy dữ liệu từ mongodb bằng trình điều khiển C #

  5. mongolastic mất nhiều thời gian để lập chỉ mục một bộ sưu tập