Có, bạn có thể chỉ định hành vi của .findOne()
như được hiển thị tốt nhất trong tài liệu trình điều khiển gốc. Sự khác biệt duy nhất ở đó là trong việc áp đặt mongoose, tài liệu "tùy chọn" phải là đối số "thứ ba" được truyền cho phương thức.
Vì vậy, bạn có thể cung cấp đặc điểm kỹ thuật "sắp xếp" cho điều này như được hiển thị trong các tùy chọn có sẵn:
Queue.findOne({ },null,{ "sort": { "_id": -1 } },function(err,doc) {
Chỉ để biết thêm thông tin, bạn có thể thực hiện việc này trong trình bao MongoDB bằng cách sau, sử dụng $orderby
tùy chọn truy vấn:
db.collection.findOne({ "$query": { }, "$orderby": { "_id": -1 } })
Cũng là .findOne()
phương thức chỉ có thể trả về một tài liệu, nhưng nó thực sự chỉ là một trình bao bọc xung quanh .find()
vì vậy tất cả các bổ ngữ đều áp dụng. Gói chỉ gọi .next()
trên con trỏ được trả về, trả về tài liệu và loại bỏ con trỏ.
Ví dụ dài hơn này cho thấy các cách khác nhau mà điều này có thể được áp dụng:
var async = require('async'),
mongoose = require('mongoose'),
Schema = mongoose.Schema;
mongoose.connect('mongodb://localhost/sequence');
var queueSchema = new Schema({
name: String,
same: { type: String, default: "same" }
});
var Queue = mongoose.model( "Queue", queueSchema );
var count = 0;
async.series(
[
// Remove any documents
function(callback) {
Queue.remove(function(err) {
if (err) throw err;
callback();
});
},
// Insert some new ones
function(callback) {
async.eachSeries(
["one","two","three"],
function(item,callback) {
var queue = new Queue({ name: item });
queue.save(function(err,doc) {
if (err) throw err;
console.dir(doc);
callback(err,doc);
});
},
function(err) {
callback(err);
}
);
},
function(callback) {
async.whilst(
function() { return count < 2 },
function(callback) {
count++
async.series(
[
// findOne is just the first one
function(callback) {
Queue.findOne({ "same": "same" },function(err,doc) {
if (err) throw err;
console.log( "FindOne:\n%s", doc );
callback();
});
},
// Or is sorted
function(callback) {
Queue.findOne(
{ "same": "same" },
null,
{ "sort": { "_id": -1 } },
function(err,doc) {
if (err) throw err;
console.log("FindOne last:\n%s", doc );
callback();
}
);
},
// find is ordered but not singular
function(callback) {
async.eachSeries(
["first","last"],
function(label,callback) {
var direction = ( label == "first" ) ? 1 : -1;
var query = Queue.find({ "same": "same" })
.sort({ "_id": direction })
.limit(1);
query.exec(function(err,docs) {
if (err) throw err;
console.log( ".find() %s:\n%s", label, docs[0] );
callback();
});
},
function(err) {
callback();
}
);
},
// findAndModify takes a sort
function(callback) {
Queue.findOneAndUpdate(
{ "same": "same" },
{ "$set": { "same": "different" } },
{ "sort": { "_id": -1 } },
function(err,doc) {
if (err) throw err;
console.log( "findOneAndUpdate:\n%s", doc );
callback();
}
);
}
],function(err) {
callback();
}
);
},
function(err) {
callback();
}
);
}
],function(err) {
console.log("done");1
mongoose.disconnect();
}
);