【问题标题】:Mongodb: how to read value without knowing field name?Mongodb:如何在不知道字段名的情况下读取值?
【发布时间】:2016-05-03 18:01:41
【问题描述】:

我有一个包含文档的集合“A”:

{_id:1, a1: "degree"}
{_id:2, a2: "score"} ...

我需要将该集合转换为键值结构,例如:

{_id: x, {name: "a1",  label: "degree"} }
{_id: y, {name: "a2",  label: "score"} }

问题是每个文档在集合 A 中可以有不同的字段名称。 要获取字段名称,我可以使用 javascript,如下所示,
但是在不知道字段名称的情况下仍然无法找到获取每个字段值的方法。

var arr = new Array()
var x = 0
var cur = db."A".find()
while( cur.hasNext() ) {
  var i = 0
  for( var field in cur[x] ) {
      arr[i] = field;    // get field name
      i++;}
db."B".save( { "name": arr[1], //fieldname
             "label":    //how to put value without knowing field name?
            )
  x++;
}

您知道如何在不知道名称的情况下获取字段值吗?
谢谢。

【问题讨论】:

  • 你的意思是{_id: x, name: "a1", label: "degree"}
  • 您是否在循环内的名称字段中获得了_id 的值?
  • 不,_id 有什么没关系..

标签: javascript mongodb field


【解决方案1】:

我不确定这是否是您真正想要的,但希望对您有所帮助。

试试这个:

var obj = [
    {_id: x, {name: "a1",  label: "degree"} },
    {_id: y, {name: "a2",  label: "score"} }
];

for (index in obj) {
    for (key in obj[index]) {
        console.log(key); 
        console.log(obj[index][key]); 
    }
}

【讨论】:

    【解决方案2】:

    感谢 cmets 和答案! 我已经完成了我的javascript代码如下:

    var arr = new Array()
    var x = 0
    var cur = db.A.find()
    while( cur.hasNext() ) {
    var i = 0
    for( var field in cur[x] ) {
        arr[i] = field;    // get field name
        print( "field name="+ field);
        print( "the value="+cur[x][field] );
        i++;
        }
    x++;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-08-30
      • 1970-01-01
      • 2021-11-09
      • 1970-01-01
      • 2018-01-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多