Ich möchte eine Sammlung erstellen bestellt erstellen:MongoDB: Wie eine Sammlung von 2 Felder
var ethTransactionSchema = new mongoose.Schema({
blockNumber: Number,
transactionIndex: Number,
from: String,
to: String,
data: String
});
Ich brauche transactionIndex geordnete Ergebnisse von Blocknummer, zu erhalten: Wenn zwei Elemente haben die gleiche Blocknummer der transactionIndex wird definieren die Bestellung.
Ich habe eine Indizes:
ethTransactionSchema.index({ blockNumber: 1, transactionIndex: 1 }, { unique: true });
ethTransactionSchema.index({ from: 1 });
Wenn ich ausführen die Abfrage:
EthTransaction.find({ from: 'address' }).sort({ blockNumber: 1, transactionIndex: 1 }).limit(20)
und eine weitere Abfrage:
EthTransaction.find(
{
$and: [
{
$or: [ { from: 'address1' }, { to: 'address2' } ]
},
{
$or: [{ blockNumber: { $gt: lastBlockGot } }, { $and: [{ blockNumber: lastBlockGot }, { transactionIndex: { $gt: lastIndexGot } }] }]
}]
}
).sort({ blockNumber: 1, transactionIndex: 1 }).limit(20)
I funktioniert perfekt, aber zu langsam. Ich frage mich, wie ich die von blockNumber, transactionIndex bestellten Felder einfügen, damit ich die Ergebnisse ohne die Sortierklausel abrufen kann.
* Ich frage mich, wie füge ich die Felder von blockNumber, transactionIndex, so dass ich die Ergebnisse ohne die Sortierklausel abrufen können. * - Sie können nicht. Es gibt keinen Anzeigenauftrag für Mongo. Wenn Sie es sortiert haben wollen, müssen Sie '.sort()' – cdbajorin