首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在mongodb原生findOne()中使用变量作为字段名?

如何在mongodb原生findOne()中使用变量作为字段名?
EN

Stack Overflow用户
提问于 2013-06-11 15:50:21
回答 4查看 63.6K关注 0票数 90

我在mongodb中有以下数据:

{  
    "name": "Amey",
    "country": "India",
    "region": "Dhule,Maharashtra"
}

我希望在query中将字段名作为变量传递时检索数据。

以下内容不起作用:

var name = req.params.name;
var value = req.params.value;
collection.findOne({name: value}, function(err, item) {
    res.send(item);
});

如何查询mongodb,同时保持字段名和字段值的动态性?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-06-11 16:26:30

需要动态设置查询对象的key:

var name = req.params.name;
var value = req.params.value;
var query = {};
query[name] = value;
collection.findOne(query, function (err, item) { ... });

执行{name: value}时,关键字是字符串'name',而不是变量name的值。

票数 147
EN

Stack Overflow用户

发布于 2016-09-08 00:23:47

只需将变量放入[]

var name=req.params.name;
var value = req.params.value;
collection.findOne({[name]:value}, function(err, item) {
res.send(item);
});
票数 70
EN

Stack Overflow用户

发布于 2016-09-01 14:47:42

我想澄清的是,如果您只想查询一个嵌套字段(而不是它的值),比如您想要查询这个文档中的字段"name“:

{
    loc: [0, 3],
    unit: {
        name : "playername"
    }
}

这将会起作用(和我的例子一样--使用update):

mdb.cords.updateOne(
    {_id: ObjectID(someid)}, 
    {$set: {[query]: newValue}}, 
    function (err, result) {
        ...
    }
}

简单地将[query]括在括号中会告诉mongodb它不是文字,而是一个路径。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17039018

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档