我有一个文档结构,其中包含一个名为shares
的属性,它是一个对象数组。
现在,我尝试将shared
包含匹配的_account
字符串的所有文档与点符号(shares._account
)进行匹配。
它不起作用,但似乎是因为属性_
前面的_account
字符。
因此,如果我将字符串用于搜索该对象中name属性的内部,一切都可以使用点表示法。
属性名称是否有任何限制?
认为_
是允许的,因为id
也有mongodb,对我而言,这是daclare绑定的一种约定。
示例:
// Collection Item example
{
"_account": { "$oid" : "526fd2a571e1e13b4100000c" },
"_id": { "$oid" : "5279456932db6adb60000003" },
"name": "shared.jpg",
"path": "/upload/24795-4ui95s.jpg",
"preview": "/img/thumbs/24795-4ui95s.jpg",
"shared": false,
"shares": [
{
"name": "526fcb177675f27140000001",
"_account": "526fcb177675f27140000001"
},
{
"name": "tim",
"_account": "526fd29871e1e13b4100000b"
}
],
"tags": [
"grüngelb",
"farbe"
],
"type": "image/jpeg"
},
我尝试使用以下查询获取该项:
// Query example
{
"$or": [
{
"$and": [
{
"type": {
"$in": ["image/jpeg"]
}
}, {
"shares._account": "526fcb177675f27140000001" // Not working
//"shares.name": "526fcb177675f27140000001" // Working
}
]
}
]
}
答案 0 :(得分:0)
除了$and
可以省略且$or
毫无意义"image/jpeg"
!= "image/jpg"
:
db.foo.find({
"type": {"$in": ["image/jpeg"]},
"shares._account": "526fcb177675f27140000002"
})
或者如果你真的想要旧的:
db.foo.find({
"$or": [
{
"$and": [
{
"type": {
"$in": ["image/jpeg"]
}
}, {
"shares._account": "526fcb177675f27140000002"
}
]
}
]
}
两者都将返回示例文档。
答案 1 :(得分:0)
您当前的查询有一些不必要的复杂构造:
$or
和$and
子句(“和”是默认行为)$in
查询将找不到与示例文档匹配,因为您的查询与数据不匹配:
type
字段是“image / jpg”,但您的示例文档中包含“image / jpeg”shares._account
值为“526fcb177675f27140000001”,但您的示例文档不包含此内容。应该有效的简化查询是:
db.shares.find(
{
"type": "image/jpeg",
"shares._account": "526fcb177675f27140000002"
}
)