2016-09-09 2 views
-2

リレーションシップが設定されているコンテンツをフィルタリングするクエリを作成したいと思います。Keystonejs - リレーションシップのアイテムのクエリ

Laptopy.js

var keystone = require('keystone'); 
    var Types = keystone.Field.Types; 

    var Laptop = new keystone.List('Laptop', { 
     map: { name: 'nazwa' }, 
     autokey: { path: 'slug', from: 'nazwa', unique: true }, 
    }); 

    Laptop.add({ 
     nazwa:{type: String, required: true}, 
     grafika:{type: Types.Relationship, ref: 'KartaGraficzna'} 

    }); 
    Laptop.register(); 

KartaGraficzna.js

var keystone = require('keystone'); 
var Types = keystone.Field.Types; 

var KartaGraficzna = new keystone.List('KartaGraficzna', { 
    map: { name: 'nazwa' }, 
    autokey: { path: 'slug', from: 'nazwa', unique: true }, 
}); 

KartaGraficzna.add({ 
    nazwa:{type: String, required: true}, 
    producent:{type: Types.Select, options: 'nVidia, AMD, Intel'}, 
}); 

KartaGraficzna.relationship({ ref: 'Laptop', path: 'grafika' }); 
KartaGraficzna.register(); 

QUERY

var Laptop = keystone.list('laptops'); 
Laptop.model.find() 
    .populate('grafika') 
    .where('grafika.nazwa', 'GTX980') 
    .exec(function (err, laptop) { 
     locals.data.laptopy = laptop; 
     next(err); 
    }); 

私は、このクエリが間違っている知っている、これはそのように動作しますではありません。 誰かがこれを行う方法を教えてもらえますか? 私はあなたの助けに感謝します

答えて

0

非常に不明な問題のステートメント=>は、関係が設定されているコンテンツをフィルタリングします。

私はそれから理解する必要があります。矛盾するコード例を挙げるとそれもそうです。 ?

どのようにしても、私は単語で行くならfilter the content that has relationships set私はgrafikaがに設定されているラップトップを見たくないと思います。

私の答えは、nullと比較するだけです。

Laptop.model.find() 
    .where('grafika', null) 
    .exec(function (err, laptop) { 
     locals.data.laptopy = laptop; 
     next(err); 
     }); 
関連する問題