sql >> データベース >  >> NoSQL >> MongoDB

単一のドキュメント文字列配列フィールドを使用したサーバー側のページ付け

    クエリでスライスを使用してから、データを入力することができます。

    User.findById({ _id: req.params.id })
               .slice('blacklistGroup', [10 * (req.query.currentPage - 1), 10])
               .populate("blacklistGroup", "username");
    

    $sliceと$lookupでaggregateを使用することもできます。

    User.aggregate([
     {"$match":{"_id":req.params.id}},
     {"$project":{"blacklistGroup":{"$slice":["$blacklistGroup", 10 * (req.query.currentPage - 1), 10]}}},
     {"$lookup":{
       "from": usercollection,
       "localField": "blacklistGroup",
       "foreignField": "_id",
       "as": "blacklistGroup"
     }},
     {"$project":{"usernames":"$blacklistGroup.username"}}])
    

    新しいルックアップバージョンを使用して、さらに強化することができます。

    User.aggregate([
     {"$match":{"_id":req.params.id}},
     {"$lookup":{
      "from":usercollection,
      "let":{"blacklistGroup":{"$slice":["$blacklistGroup", 10 * (req.query.currentPage - 1), 10]}},
      "pipeline":[
        {"$match":{"$expr":{"$eq":["$_id","$$blacklistGroup"]}}},
        {"$project":{"username":1,"_id":0}}
      ],
      "as":"blacklistGroup"
    }}]);
    

    完全を期すために、例全体を追加しました

    var mongoose = require('mongoose');
    mongoose.connect('mongodb://localhost/test', {useNewUrlParser: true});
    var db = mongoose.connection;
    mongoose.set('debug', true);
    db.on('error', console.error.bind(console, 'connection error:'));
    db.once('open', function() {
      // we're connected!
    });
    const UserSchema = new mongoose.Schema({
        blacklistGroup: [{
          type: String,
          ref: 'Group'
        }]
      })
    const GroupSchema = new mongoose.Schema({
        _id: String,
        content: String,
        username: String
      })
    const User  = mongoose.model('User', UserSchema, 'users');
    const Group = mongoose.model('Group', GroupSchema, 'groups');
    module.exports = {
        User, Group
      }
    
     User.findOne().slice("blacklistGroup", 3).populate("blacklistGroup", "username").exec((err, blacklistGroup) => {
          console.log("Populated blacklistGroup " + blacklistGroups);
        })        
    

    また、たとえば2のMongoPlaygroundliknを追加しました

    https://mongoplayground.net/p/YP5l5Kz3sp8



    1. MONGODB [DEBUG]カーソルのcursor.refresh()7078636577051629992

    2. データソースの自動構成に失敗しました:'spring.datasource.url'が指定されていません

    3. PyMongoAggregateのexecutionStatsの取得方法

    4. DjangoChannels2のグループにメッセージを送信する