2015-06-03 2 views
0

У меня есть следующий код узла ...Как вводить весь объект в Cypher запрос с использованием NodeJS

router.post('/node/source', function(req, res, next){ 
    var query = [ 
     'MERGE (source:Source {name:{name}, loc:{location}})', 
     'RETURN source' 
    ].join('\n'); 
    db.cypher({ 
     query: query, 
     params: req.body 
    }, function(err){ 
     if(!err){ 
      res.json(req.body); 
     } 
     else{ 
      res.status(500).send(err); 
     } 
    }); 
}); 

Это прекрасно работает до тех пор, как я посылаю местоположение и имя, но что, если я хочу отправлять разные свойства? Как, может быть, я только хочу отправить местоположение иногда, поэтому я просто хочу вставить весь объект req.body. Есть ли лучший способ, чтобы что-то вроде этого ...

var query = [ 
    'MERGE (source:Source'+JSON.stringify(req.body)+')', 
    'RETURN source' 
].join('\n'); 

ответ

2

Не знаю ноты node.js подробно. Cypher позволяет изменять свойства на основе карты, см. http://neo4j.com/docs/stable/query-set.html#set-adding-properties-from-maps.

MERGE (source:Source {name:{name}, loc:{location}}) 
SET n += {additionalProps} 
RETURN source 

ваши параметры:

name: 'myname', 
location: 'mylocation', 
additionalProps: {prop1:'val1',....} 

Если объект тела карту, вы можете быть в состоянии передать, что непосредственно.

+0

Я попробую это, будет ли мой узел иметь свойство prop1 или это будет n.prop1. И откуда это произошло? Это опечатка для источника? – Jackie

+0

Извините, что это опечатка, должна была быть «источником». Вашим параметрам не нужен префикс. –

Смежные вопросы