【发布时间】:2020-02-10 20:23:03
【问题描述】:
我有一个带有对象数组的 mongodb 集合。我希望能够以任何顺序搜索数组中的对象,并且仅在找到该数组中的所有对象时才返回匹配项。
我的收藏:
{
"_id" : ObjectId("5234c367354kj63c9cae4fec"),
"field1" : "TEST",
"created" : <DATE_HERE>,
"field2" : [
{
"index" : "A",
"value" : "1"
},
{
"index" : "B",
"value" : "2"
},
{
"index" : "C",
"value" : "3"
}
],
}
如果我提供下面的查询,上面的文档将被返回,因为所有 3 个对象都按照它们存储的确切顺序给出。
db.collection("collection").find({field1: "TEST", field2: [{"index": "A", "value": "1"}, {"index": "B", "value": "2"}, {"index": "C", "value": "3"}]})
但是,我希望能够以任意顺序找到上面给出的 3 个对象的文档。例如下面的查询:
db.collection("collection").find({field1: "TEST", field2: [{"index": "B", "value": "2"}, {"index": "A", "value": "1"}, {"index": "A", "value": "1"}]})
我知道上面的查询不会起作用,如果它甚至可能的话,并且缺少正确的语法/搜索功能,但这只是为了解释我的思考过程和我想要实现的目标。
我尝试使用$in 搜索与field2: {$in: [<3_objects_above>]} 类似,但它不会给我一个完全匹配的结果。例如,如果此集合中有第二个文档为 field2: [...{"index": "Z", "value": "543"}],并且它仅包含上面 2 个查询和表中显示的 3 个对象中的 1 个,则该第二个文档也将被返回,因为它至少匹配提供的 1 个对象即使我没有提供对象{"index": "Z", "value": "543"},也在数组中。
有没有办法以任意顺序在数组中提供对象,并在集合中找到与所有 3 个对象匹配的文档,无论它们以什么顺序给出?匹配所有 3 个而不是 3 个中的任何一个?
【问题讨论】:
-
不,因为我不知道那个,但我刚刚测试过并且有效!!!谢谢!能否请您回复帖子,以便我接受您的回答?
标签: arrays mongodb object mongodb-query