KeystoneJS从另一个值获取ObjectID

时间:2016-12-20 13:34:27

标签: node.js keystonejs

我想通过使用slug path(key)

从类别中获取ObjectID

这是模型(它是keystone生成器的默认值)

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();

继承人从mongoshell获得的东西

db.getCollection( 'postcategories')找到({ “键”: “测试”})

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

这只是为了找出密钥是否有效 但是当我在路线上使用它时

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

日志说测试未定义。
我也尝试使用postcategories,但它表示keystone不认识它

2 个答案:

答案 0 :(得分:1)

让我们从keystone issue这里接受我们的讨论。

原因应该是find()返回Promise,因此操作是异步运行的。因此,在您记录该值时,它仍然是undefined

keystone演示网站上有一些承诺的例子,例如here

我认为你想要的是:

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);
    }
});

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

另外,我在这里不确定,但如果find({"key":"test"})在mongoshell中有效,它也可能在mongoose中有效,那你试过keystone.list('PostCategory').model.find({"key":"test"}).exec(...)吗?

答案 1 :(得分:0)

var gc = test; ?????

显然测试未定义。从Javascript的角度来看。 JS希望test是一个变量。并且它当时不知道DB是什么。