Строковое значение из странного поведения документа mongoose, добавляемое в переменную - PullRequest
0 голосов
/ 18 июня 2019

У меня есть монго-документ с именем New, у которого есть поддокумент с именем hashtags, который имеет значение name, равное string.Я пытаюсь добавить все хэштеги, принадлежащие новому, в переменную, но добавляю дополнительные символы (кажется, что строковое значение name плохо декодируется из bson или что-то в этом роде).

Новый документ :

var newSchema = new Schema({
    ...
    hashtags: [{
        type : mongoose.Schema.ObjectId,
        ref: 'Hashtag'
    }]
});

Документ хэштега :

    var mongoose = require('mongoose')
    var Schema = mongoose.Schema

    var hashtagSchema = new Schema({
        color:  {
            type: String,
            default: '#000000'
        },
        name:  {
            type: String
        }
    });
    var hashtag = mongoose.model('Hashtag', hashtagSchema )

    module.exports = hashtag

Snniped код тестирования :

    docs.forEach(noticia => {
        if(noticia.hashtags.length > 0){
            for(i in noticia.hashtags){
                if(noticia.hashtags[i] && noticia.hashtags[i].name){
                    text +=  '#' + noticia.hashtags[i].name.replace(/\s/g,'') + ' '
                }
            }
        }
    })
console.log(text)

Консольный вывод :

#Lula #toBSON #_cast #_markModified #_registerAtomic #$__getAtomics #hasAtomics #_mapCast #push #nonAtomicPush #$pop #pop #$shift #shift #pull #splice #unshift #sort #addToSet #set #toObject #inspect #indexOf #pull

Я пытался применить noticia.hashtags[i].name.replace(/\s/g,'').toString():

    docs.forEach(noticia => {
        if(noticia.hashtags.length > 0){
            for(i in noticia.hashtags){
                if(noticia.hashtags[i] && noticia.hashtags[i].name){
                    text +=  noticia.hashtags[i].name.toString() + ' '
                }
            }
        }
    })

Консольный вывод LulatoBSON_cast_markModified_registerAtomic$__getAtomicshasAtomics_mapCastpushnonAtomicPush$poppop$shiftshiftpullspliceunshiftsortaddToSetsettoObjectinspectindexOfpull

Как мне декодировать это строковое значение?

1 Ответ

1 голос
/ 18 июня 2019

Оператор for ... in выполняет итерации по всем не-символьным перечисляемым свойствам объекта.

var string1 = "";
var object1 = {a: 1, b: 2, c: 3};

for (var property1 in object1) {
  string1 += object1[property1];
}

console.log(string1);
// expected output: "123"

Вы выполняете итерации по свойствам noticia.hashtags

...