无法删除来自Cassandra db的行.__ columns属性

时间:2015-02-04 20:32:13

标签: javascript node.js cassandra

我有一个从Cassandra中提取数据的node.js代码,我试图从cassandra驱动程序中删除对象中的列,但是我收到错误。

'use strict';
var ResultFormatter = (function () {
    function ResultFormatter() {
    }
    ResultFormatter.RemoveColumnNames = function (data) {
        data.forEach(function (obj) {
            if (obj['__columns']) {
                delete obj['__columns'];
            }
        });
    };
    return ResultFormatter;
})();
module.exports = ResultFormatter;

以及调用它的代码:

this._client.execute(query, [], function (err, result) {
            if (err) {
                callback(err);
            } else {
                try  {
                    var siteList = [];
                    ResultFormatter.RemoveColumnNames(result.rows);
                    result.rows.forEach(function (row) {
                        var site = row;
                        site.contractedResources = JSON.parse(row.contractedResources);
                        siteList.push(site);
                    });
                } catch (er) {
                    callback(er);
                    return;
                }
                callback(null, siteList);
            }
        });

问题是__columns属性未被删除。

CentOS 6.4上安装的节点版本为0.10.40 卡桑德拉在同一个盒子里。

有趣的是,我们在Windows机器上安装了另一个Node和Cassandra,并且完全相同的代码在那里工作。

我研究了关于在对象中使用delete的javascript规范。

我的问题是如何处理result.rows?为什么它与来自窗框中的卡桑德拉的不同呢?

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

我不知道为什么要删除private not enumerable property in javascript

您不应更改外部模块返回的实例的私有属性。

如果要遍历行中的所有公共(可枚举)属性,可以使用:

row.forEach(function (value, name) {
  console.log('column %s with value %s', name, value);
});

或者你可以序列化整个row(它不会包括私人道具):

JSON.stringify(row);