【发布时间】:2016-09-15 04:45:52
【问题描述】:
doc 说:
要对整个嵌入文档指定相等匹配,请使用 查询文档
{ <field>: <value> }其中<value>是 要匹配的文件。嵌入文档上的相等匹配需要 精确匹配指定的<value>,包括字段顺序。
使用点表示法并不是一个完全令人满意的解决方案,因为它还匹配嵌入了比所需字段更多的文档的文档。而且我可能不知道哪些是其他可能的字段,因此无法明确排除不需要的字段。
也不希望查询每个可能的字段组合,因为我不想写(#fields)!查询。
当我不关心字段的顺序时,如何找到包含嵌入式文档的文档?
例如,假设一组文档遵循此架构,但 inner 字段的顺序未知或可能会有所不同,具体取决于插入方式/时间:
{
_id: ObjectId()
inner: {
some_field: some_value,
some_other_field: some_other_value
}
}
如果我想获取包含inner 对象的所有文档为{some_field: some_value, some_other_field: some_other_value},我想
db.collection.find({inner:{some_field: some_value, some_other_field: some_other_value}})
但我会错过带有inner 对象的文档作为{some_other_field: some_other_value, some_field: some_value}。
使用点表示法
db.collection.find({"inner.some_field": some_value, "inner.some_other_field": some_other_value})
将匹配我感兴趣的所有文档,但也包括噪声
{
_id: ObjectId()
inner: {
some_field: some_value,
some_other_field: some_other_value,
some_undesired_field: some_undesired_value
}
}
【问题讨论】:
标签: mongodb mongodb-query