给定 MongoDB 中的以下用户对象,最快的搜索方式是relation.$.status == 'friends'
什么?
需要找到一种方法来获取包含值为 的对象find
的user
集合数据(请参阅下面的伪查询)。relation
"friends"
此特定集合的键已设置为 uid,因此假设下面的“用户数据”部分可能不会更改。
用户数据:
{
"_id": ObjectId('1a1a1a1a111a1a11a1a1a1a'),
"name": "Tester",
"relation": {
"2b2b2b2b2b2b2b2b2b2b2b": {
"status": 'friends',
"status_changed_date: ISODate("2013-10-28T00:00:00.0000Z"),
// etc...
},
"3c3c3c3c3c3c3c3c3c3c3c": {
"status": 'engaged',
"status_changed_date: ISODate("2013-10-28T00:00:00.0000Z"),
// etc...
}
}
}
询问:
var query = {
// pseudo, key-ignoring nested document search
'relation.$.status': 'friends'
}
var projection = {
'relation': 1
}
db.user.findOne(query, projection)
期望的输出:
{
"2b2b2b2b2b2b2b2b2b2b2b": {
"status": 'friends',
"status_changed_date: ISODate("2013-10-28T00:00:00.0000Z"),
// etc...
}
}
对用户数据结构的明显更正应该是创建relation
一个对象数组,其中包含_id
和status
作为键。有点在这里寻找临时垫片。