u013365904
我翼无痕
采纳率100%
2016-05-12 16:14 阅读 2.6k
已采纳

Nodejs find() MongoDB, 如何接受变量作为field 来控制返回哪些列的数据?

10

object和attribute 都是作为函数参数传递进来的
object = ‘Port 0’
attribute= ‘Utilization(%)'
如果我用下面的语句来query MongoDB,可以得到想要的结果
collection.find({"Object Name":object.toString()}, {"Utilization (%)":1, "Poll Time":1, "_id":0}).sort({"Poll Time":1}).toArray(function(err, docs) { ... }
结果返回的是“Object name" 等于 ’Port0 0’ 的文档里的‘Utilization (%)' 和 ’Poll Time' 这两行列

但是如果我想用attribute来代替hardcode 的”Utilization (%)“, 结果就无法返回”Utilization (%)"这一行,语句如下
collection.find({"Object Name":object.toString()}, {**attribute**:1, "Poll Time":1, "_id":0}).sort({"Poll Time":1}).toArray(function(err, docs) { ... }

不明白如果我想用变量来作为find() 里第二个{}的值,应该怎么用?现在给我的感觉是程序认为我想返回key是‘attribute'这一列的数据,而没有认为attribute是一个变量。
是我用的find()方式不对还是有特殊的写法?
如果想返回变量值(函数参数)指定的列,到底应该怎么做?希望不吝赐教。

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享

2条回答 默认 最新

  • 已采纳
    oyljerry oyljerry 2016-05-12 23:20

    当用变量的使用,用[]来组织访问

     var name = req.params.name;
    var value = req.params.value;
    var query = {};
    query[name] = value;
    collection.findOne(query, function (err, item) { ... });
    
    点赞 1 评论 复制链接分享
  • u013365904 我翼无痕 2016-05-13 01:57

    多谢,我也这样解决了。

    var query = {};
    query["Poll Time"] = 1;
    query[attribute] = 1;
    query["_id"] = 0;

    collection.find({"Object Name":object.toString()}, query).sort({"Poll Time":1}).toArray(function(err, docs) { ... }

    点赞 1 评论 复制链接分享

相关推荐