假设我在mongodb中有类似的结构:
{
'source1': {
'name':'john',
'phone':'5555555'
}
'source2': {
'name':'john',
'city':'new york'
}
'source3': {
'name':'john',
'phone':'5555555'
'city':'new york'
}
}
如何选择具有“手机”字段(source1和source3)的所有来源? 类似* .phone {$ exists:true}
答案 0 :(得分:5)
基本上你不能像你在mongodb中说“* .phone”一样,你应该总是在你试图查询的地方指定字段。
因此,可以在每个来源中手动检查一个丑陋的解决方案:
db.sources.find( { $or : [ { "source1.phone" : { $exists : true },
{ "source2.phone" : { $exists : true },
{ "source3.phone" : { $exists : true }]} };
但是,如果您将模式重新设计为使用一个嵌套的源数组:
{
'sources': [{
'name':'john',
'phone':'5555555',
'source_name': "source1"
},
{
'name':'john',
'city':'new york',
'source_name': "source2"
}]
}
在请求返回包含电话字段的所有来源后,您可以更轻松地执行此操作:
db.sources.find({ "sources.phone" : { $exists : true })