2016-02-19 5 views
-1

У меня есть вид в Couchbase, который я использую для извлечения моих данных. Упрощенный, мое ведро данных содержит:Couchbase - получить doc, если значение ключа пуст (то есть имеет длину 0)

{ 
    "id" : 123, 
    "key" : "some value" 
}, 
{ 
    "id" : 456, 
    "key" : "" 
} 
... 

, и я хочу, чтобы получить все документы, где «ключ» присутствует, но его значение пусто.

Если я использую представление, как это:

function (doc, meta) { 
    if(doc.key) 
    emit([doc.id], doc); 
} 

я оба JSONs выше, если использовать представление, как это:

function (doc, meta) { 
    if(doc.key && doc.key == "") 
    emit([doc.id], doc); 
} 

я не получаю ни один из них. Я хочу получить json с id = 456. Каков правильный синтаксис?

ответ

0

Это потому, что пустая строка является ложным в JavaScript

~ $ node 
> var x = "" 
undefined 
> x 
'' 
> if (x && x == "") { console.log("it is empty") } 
undefined 
> if (x) { console.log("it is empty") } 
undefined 
> if (!x) { console.log("it is empty") } 
it is empty 
undefined 

Вы должны использовать что-то вроде

if(doc.key === "") 

Трайпл равна сравнит его нанизывать более строго

+1

короткие и смешные видео о WAT эффекты в javascript и ruby ​​:) https://www.destroyallsoftware.com/talks/wat – avsej

+0

Спасибо, это сработало. (Я все еще не понимаю, почему мне нужно использовать 'if (doc.key ===" ")' вместо 'if (doc.key && doc.key ===" ")'. есть json без этого 'key'?). – ocramot

+0

Вы можете сравнить с 'undefined'. Подобно 'var doc = {x:" "}; doc.y == undefined' возвращает 'true', а' doc.x == undefined' дает вам 'false' – avsej