2016-12-20 7 views
0

ich die ObjectID aus einer Kategorie erhalten möge durch Slug Pfad (key)
KeystoneJS get ObjectID von einem anderen Wert

dies ist das Modell (es ist der Standard von Keystone-Generator)

var keystone = require('keystone'); 

/** 
* PostCategory Model 
* ================== 
*/ 

var PostCategory = new keystone.List('PostCategory', { 
    autokey: { from: 'name', path: 'key', unique: true }, 
}); 

PostCategory.add({ 
    name: { type: String, required: true }, 
}); 

PostCategory.relationship({ ref: 'Post', path: 'categories' }); 

PostCategory.register(); 

. Heres, was ich von mongoshell bekommen

db.getCollection ('postcategories') finden ({ "Schlüssel": "test"})

{ 
    "_id" : ObjectId("5853a502455e60d5282d9325"), 
    "key" : "test", 
    "name" : "test", 
    "__v" : 0 
} 

Dies ist nur zu finden, wenn der Schlüssel
funktioniert, aber wenn ich diese Routen auf verwenden

var gc = "test"; 
var c = keystone.list('PostCategory').model.find().where('key').equals(gc); 
c.key = gc; 
console.log(gc ,c.id); 

Das Protokoll sagt Test nicht definiert.
ich versuchte postcategories auch zu benutzen, aber sagt, es keystone es zu erkennen doesnt

Antwort

1

Lassen Sie uns unsere Diskussion von Ihrem keystone issue hier aufnehmen.

Der Grund sollte sein, dass find() einen Promise zurückgibt, so dass der Vorgang asynchron ausgeführt wird. Wenn Sie den Wert jetzt protokollieren, ist es immer noch undefined.

Es gibt Beispiele für die Versprechen auf der Keystone-Demo-Site, zum Beispiel here.

Ich denke, was Sie wollen, ist so etwas wie:

var gc = "test"; 
var c = keystone.list('PostCategory').model.find().where('key').equals(gc).exec(function (err, results) { 
    if (err) { 
     console.log(err); 
    } else { 
     console.log(results); 
    } 
}); 

oder

keystone 
    .list('PostCategory') 
    .model 
    .find() 
    .where('key') 
    .equals(gc) 
    .then(function(category) { 
     console.log(category.id); 
}); 

Auch ich bin hier nicht sicher, aber wenn find({"key":"test"}) Werke in mongoshell, könnte es auch in Mungo arbeiten, Also hast du versucht keystone.list('PostCategory').model.find({"key":"test"}).exec(...)?

+0

die Mongo-Shell funktioniert gut. Ich habe es nur gemacht, um zu finden, ob der Schlüssel funktioniert, ich brauche ihn wirklich nicht für irgendetwas anderes. Das erste Beispiel funktioniert gut, aber ich bin mir immer noch nicht sicher, wie ich die ID bekommen könnte. Das zweite Beispiel scheint nicht zu funktionieren – Bill

+0

Sie können die ID wie z 'ergibt [0] ._ id' für das erste Ergebnis. –

0
var gc = test; ????? 

offensichtlich Test nicht definiert. aus Javascript Perspektive. JS erwartet, dass der Test eine Variable ist. und es weiß nicht, was DB in diesem Moment ist.

+0

was meinst du? das ist der Schlüsselwert – Bill

+0

Wenn ich ObjectID anstelle von Schlüssel verwende, funktioniert es jetzt so, dass ich ObjectID mit Hilfe des Schlüssels – Bill

+0

abrufen möchte. test ist in Ihrem JavaScript nicht definiert, daher der Fehler. Du brauchst es nur in Anführungszeichen, sicher? '" test "' –