0

skip(); を使用せずに MongoDB でページネーションを機能させようとしています。

mongo シェルでは、クエリで次の結果が得られましたが、Javascript では空の [];

ObjectID が間違っていると思います。Node.js で「mongodb ObjectID」および「mongojs」ライブラリを使用しています。

モンゴシェル:

db.chat.find({
  _id: { $lt: ObjectId("53e901c125c68270311e5f41") },
  user_id: 1,
  target_user_id: 1,
  "$or": [{user_id: 1, target_user_id:1}]
}).sort({
  ts: -1
}).limit(5);

出力:

{ "_id" : ObjectId("53e88e1bb76e781413000029"), "user_id" : 1, "target_user_id" : 1, "message" : "Hey" }
{ "_id" : ObjectId("53e88f51b76e78141300002a"), "user_id" : 1, "target_user_id" : 1, "message" : "Hey" }
//ect.

Javascript

var ObjectID            = require('mongodb').ObjectID;
var db                  = require("mongojs").connect(db_uri, db_collections);

//last_ts = "53e901c125c68270311e5f41"
var last_id = ObjectID.createFromHexString(last_ts);

db.chat.find({
  _id: { $lt: last_id },
  user_id: 1,
  target_user_id: 1,
  "$or": [{user_id: 1, target_user_id:1}]
}).sort({
  ts: -1
}).limit(5).toArray(function (err, docs) {
  console.log("docs:"+docs); //"docs" - no result
  console.log("err:"+err); //"err:null"

  if(docs != null){
    console.log(JSON.stringify(docs)); //"docs:[]"
  }
});

JS のクエリで同じ結果を得るにはどうすればよいですか?

ドキュメントの $oid で編集します。

http://docs.mongodb.org/manual/reference/mongodb-extended-json/#oid

まだ動作していません..

var last_ts = "53e901c125c68270311e5f41";
db.chat.find({_id: {$lt: {"$oid": last_ts}}, user_id:1, target_user_id:1, "$or": [{user_id: 1, target_user_id:1}]}).sort({ts: -1}).limit(5)

編集 :

var last_ts = "53e901c125c68270311e5f41";
new ObjectID(last_ts)
4

1 に答える 1

0

私が間違っていなければ、単に ObjectID 文字列を mongo クエリに渡すことができます。

db.chat.find({
    _id: { $lt: last_ts},
    user_id: 1,
    target_user_id: 1,
    "$or": [{user_id: 1, target_user_id:1}]
})
...
于 2014-08-13T22:00:12.620 に答える