我有一些用户附加了多个社交网络帐户。在某些地方,一些用户已经能够使用这些相同的网络创建多个帐户,而我正试图让它们全部重新出现。
我的结构类似:
users: [
{
accounts: [
{
type: "twitter", uid: 123123
},
{
type: "facebook", uid: 123123
}
]
}
]
我有多个用户使用相同的Twitter帐户,我希望将它们全部归还。我使用像
这样的查询 db.users.find({"accounts.type": "twitter", "accounts.uid" : 123123});
并且无论我什么,我只能得到一个结果,虽然我100%肯定比使用包含此ID。我也试过了
db.users.find({"accounts: {"type": "twitter", "uid": 123123}});
我在这里可以缺少什么?它引起了一些奇怪的问题,所以我想快速解决这个问题,谢谢!
答案 0 :(得分:2)
您的查询很好,请在shell中尝试:
db.users.save({accounts: [{type: "twitter", uid: 12345},{type: "facebook", uid: 67890}]})
db.users.save({accounts: [{type: "twitter", uid: 12345},{type: "facebook", uid: 67890}]})
db.users.count({'accounts.type':"twitter", 'accounts.uid':12345})
2
如果验证后问题仍然存在,请发布两个完整的示例文档和您在mongo日志中出现的查询(setProfilingLevel(2))。
另外,为了完整起见,您可以尝试:
db.users.count({accounts:{$elemMatch:{type: "twitter", uid: 12345}}})
哪个完全一样,但稍微“正确”
答案 1 :(得分:1)
我能够使用这样的东西来实现它:
db.users.find({"$where": "function(){for(var i in this.accounts){if(this.accounts[i].type='twitter'&&this.accounts[i].uid==123123){return true;}}}"});
对于我正在尝试做的事情似乎有点太多了 - 如果有人有更好的解决方案让我知道!
答案 2 :(得分:0)
好像你应该使用$ elemMatch,因为每个用户都有几种类型的帐户。然后它应该正常工作。
http://www.mongodb.org/display/DOCS/Dot+Notation+%28Reaching+into+Objects%29
阅读“与$ elemMatch匹配”部分。它的解释比我能做得更好。