2016-12-14 129 views
0

在mongo shell中,我试图检查一个JSON推入变量是否具有字段名称或不是。但是,由于缺少某些东西,我得到错误。mongodb:检查该字段是否存在于JSON中

var p= db.monit.findOne({_id: 0}) 
if ("p.pay[0].reR": {$exists: true}) 
    print(p.pay[0].reR) 

在上面的代码,我想检查是否reR场变量p推JSON文档中存在。

+0

@felix:这是工作..........你可以发布这个答案。我会在你发布后标记。 –

回答

1

你混合两种不同的东西。必须在mongoDB查询中使用 $exists。 这里您需要的是javascript方法obj.hasOwnProperty()。 像这样使用它:

var p= db.monit.findOne({_id: 0}) 
if (p.pay[0].hasOwnProperty("reR")){ 
     print(p.pay[0].reR); 
    } 
0

使用查询作为内$exists操作:

var p = db.monit.findOne({ 
    "_id": 0, 
    "pay.0.reR": { "$exists": true } 
}) 
if (p !== null) printjson(p.pay[0].reR) 

这将寻找statisfies在_id具有值0 AND$exists嵌入文档与属性上面的查询文件reR作为pay数组的第一个元素(使用dot notation)。

+0

我不能检查这个在初始级别,因为该字段是否存在,我需要执行一些其他操作,如果该字段存在,还有额外的计算需要执行。所以,我想检查字段是否存在于变量'p'中 –

1

我想你应该尝试使用,

var p=db.monit.findOne({_id: 0}); 
var q = db.monit.findOne("p.pay[0].reR": {$exists: true}); 
if(q) 
print(p.pay[0].reR); 
+0

它给了我空值。虽然我修改从这个查询得到的解决方案,我正在寻找一个优化的查询,我不回看集合后,我加载数据到变量。这可能吗? –