MongoDB-查询数组
时间:2020-02-23 14:40:51 来源:igfitidea点击:
在本MongoDB教程中,我们将学习查询数组。
登录到您的MongoDB服务器并插入以下文档。
对于本教程,我会将以下文档插入posts集合中。
> db.posts.insertMany([
{
"title": "This is my first post!",
"tags": ["awesome", "post", "blog"]
},
{
"title": "Dinner time :)",
"tags": ["food", "dinner", "fun"]
},
{
"title": "Birthday Treat",
"tags": ["fun", "food", "birthday", "treat", "party"]
}
]);
匹配精确数组
在下面的示例中,我们将获取数组中恰好有3个元素的文档,其值依次为" awesome"," post"和" blog"。
> db.posts.find({
"tags": ["awesome", "post", "blog"]
}).pretty();
{
"_id" : ObjectId("5d1b43d9085e37060f4c36b5"),
"title" : "This is my first post!",
"tags" : [
"awesome",
"post",
"blog"
]
}
注意!如果在上面的查询中更改数组元素的位置,则将不会得到相同的结果。
查询数组中的元素
在下面的示例中,我们将获取所有包含标签字段" tags"的文档,其中包含" food"作为数组元素之一。
> db.posts.find({ "tags": "food" }).pretty();
{
"_id" : ObjectId("5d1b43d9085e37060f4c36b6"),
"title" : "Dinner time :)",
"tags" : [
"food",
"dinner",
"fun"
]
}
{
"_id" : ObjectId("5d1b43d9085e37060f4c36b7"),
"title" : "Birthday Treat",
"tags" : [
"fun",
"food",
"birthday",
"treat",
"party"
]
}
查询数组中的某些元素
在下面的示例中,我们将以任意顺序从值列表中获取所有具有数组字段tags的文档,这些值包含值food,dinner和fun的列表。
读取标签数组中任何顺序具有"食物","乐趣"或者"晚餐"的任何文档。
> db.posts.find({
tags: { $in: ["food", "fun", "dinner"] }
}).pretty();
{
"_id" : ObjectId("5d1b43d9085e37060f4c36b6"),
"title" : "Dinner time :)",
"tags" : [
"food",
"dinner",
"fun"
]
}
{
"_id" : ObjectId("5d1b43d9085e37060f4c36b7"),
"title" : "Birthday Treat",
"tags" : [
"fun",
"food",
"birthday",
"treat",
"party"
]
}
查询数组中给定元素的顺序不一
在下面的示例中,我们将获取所有具有数组字段tags的所有文档,其中tags具有任意顺序的值food,dinner和fun列表。
> db.posts.find({
tags: { $all: ["food", "fun", "dinner"] }
}).pretty();
{
"_id" : ObjectId("5d1b43d9085e37060f4c36b6"),
"title" : "Dinner time :)",
"tags" : [
"food",
"dinner",
"fun"
]
}
按数组长度查询
在下面的示例中,我们将获取所有具有3个元素的数组字段tags的文档。
> db.posts.find({
"tags": { $size: 3 }
}).pretty();
{
"_id" : ObjectId("5d1b43d9085e37060f4c36b5"),
"title" : "This is my first post!",
"tags" : [
"awesome",
"post",
"blog"
]
}
{
"_id" : ObjectId("5d1b43d9085e37060f4c36b6"),
"title" : "Dinner time :)",
"tags" : [
"food",
"dinner",
"fun"
]
}

