Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
多级子文档中的mongodb筛选器?_Mongodb - Fatal编程技术网

多级子文档中的mongodb筛选器?

多级子文档中的mongodb筛选器?,mongodb,Mongodb,这是我的mongodb表设计 “_id”:ObjectId(“5368e65ae6aa265432000002”), “账户”:{}, “联系人”:{ "1" : { “账户”:{ “用户1”:“数据”, “用户3”:“数据” } }, "2" : { “账户”:{ “用户2”:“数据”, “用户5”:“数据”, } }, "3" : { “账户”:{ “用户4”:“数据” “用户7”:“数据”, } } }, 我的问题是如何检查用户是否已经与任何accounts对象关联 例如,我有像user

这是我的mongodb表设计

“_id”:ObjectId(“5368e65ae6aa265432000002”),
“账户”:{},
“联系人”:{
"1" : {
“账户”:{
“用户1”:“数据”,
“用户3”:“数据”
}
},
"2" : {
“账户”:{
“用户2”:“数据”,
“用户5”:“数据”,
}
},
"3" : {
“账户”:{
“用户4”:“数据”
“用户7”:“数据”,
}
}
},
我的问题是如何检查用户是否已经与任何accounts对象关联


例如,我有像user1、user2这样的数据。我想检查是否已经添加了密钥

如何检查MongoDB中是否存在字段,您可以看到

就你而言:

db.yourcollectionname.find({"contacts.1.accounts.user1": { $exists : true }})

但不幸的是,我无法回答,如何在一个查询中检查所有ID(1,2,3)

可能是db.yourcollectionname.find($or:[{“contacts.1.accounts.user1:{$exists:true},{“contacts.2.accounts.user1:{$exists:true},{“contacts.3.accounts.user1:{$exists:true}])。但它看起来真的很难看。数据库结构的设计似乎不适合数据使用模式。考虑重构PHP可能是有道理的。更好的答案是您需要更改数据的结构。像您这样的子文档需要显示的绝对路径。您需要您的联系人实际上是一个数组,“用户”键需要是值。这样,您就可以简单地进行比较。不要将动态数据(如ID)放在键名中。正如你所看到的,它给你带来了无尽的麻烦。