MongoDB检查嵌入文档是否为空?

时间:2015-04-24 00:49:11

标签: mongodb

我有以下文件,我需要返回没有选票的姓名

user:
{ 
    'user_id': (id), 
    'name': (name),  
    'votes': {
    (vote_type): (No.of votes of this type)
    }, 
}

我尝试使用 db.user.find({votes:null},{name:true})。pretty()。没有结果显示。我该如何解决。感谢您的帮助!

2 个答案:

答案 0 :(得分:1)

默认情况下,MongoDB如果字段未填充,MongoDB将不会为该文档创建属性,因此您应该能够测试它$exists

db.user.find({votes: {$exists: false}},{name: true}).pretty()

如果您将其设置为null,但您应该可以按照checking for null所述查询它:

db.user.find({votes: null},{name: true}).pretty()

如果两者都不起作用,您可能默认存储空对象{}并需要检查:

db.user.find({votes: {}},{name: true}).pretty()

答案 1 :(得分:0)

您可以迭代所有元素并添加到那些新的字段f.e. “withNoVotes”。

db.user.find().forEach(function(doc) {
  if(doc.votes) {
    for(var voteType in votes) {
       if(votes[voteType] && votes[voteType] > 0) {
          db.user.update({_id: doc._id}, {$set: {withNoVotes: true}});
          break;
       }
    }
  }
});

现在使用常规查询找到它们以通过此新字段查找

db.user.find({withNoVotes: true});