我有以下文件,我需要返回没有选票的姓名
user:
{
'user_id': (id),
'name': (name),
'votes': {
(vote_type): (No.of votes of this type)
},
}
我尝试使用 db.user.find({votes:null},{name:true})。pretty()。没有结果显示。我该如何解决。感谢您的帮助!
答案 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});