Mongodb Mongo查询以查找对象数组中的字段
我有一个名为Mongodb Mongo查询以查找对象数组中的字段,mongodb,mongodb-query,Mongodb,Mongodb Query,我有一个名为collectionA的集合,它包含一个类型对象数组 例如: { "_id" : ObjectId("123456"), "tags" : [ { "name" : "Bob D", }, { "name" : "another name", } ... 如何编写与对象数组中的名称匹配的查询? 我尝试了db.getCollection('collectionA')。查找({“name”:“Bob D}),但
collectionA
的集合,它包含一个类型对象数组
例如:
{
"_id" : ObjectId("123456"),
"tags" : [
{
"name" : "Bob D",
},
{
"name" : "another name",
}
...
如何编写与对象数组中的名称匹配的查询?
我尝试了
db.getCollection('collectionA')。查找({“name”:“Bob D})
,但没有成功。要筛选嵌套数组,您可以使用(作为投影):
它返回第一个匹配数组元素,或用于获取标记的多个匹配元素数组:
db.col.aggregate([ { $addFields: { tags: { $filter: { input: "$tags", as: "tag", cond: { $eq: [ "$$tag.name", "Bob D" ] } } } } } ])
要过滤嵌套数组,可以使用(作为投影):
它返回第一个匹配数组元素,或用于获取标记的多个匹配元素数组:
db.col.aggregate([ { $addFields: { tags: { $filter: { input: "$tags", as: "tag", cond: { $eq: [ "$$tag.name", "Bob D" ] } } } } } ])
您可以从您的集合和预期输出中添加示例文档吗?请尝试db.getCollection('collectionA')。查找({“tags.name”:“Bob D”})
,因为name
嵌套在tags
@mickl中,我已经尝试了您的命令,只是想取回整个对象(objectId(123456))您可以从集合和预期输出中添加示例文档,而不是名称与之匹配的标记数组中的单个对象?请尝试db.getCollection('collectionA')。查找({“tags.name”:“Bob D”})
由于name
嵌套在tags
@mickl中,我尝试了你的命令,但我要取回的是整个对象(objectId(123456)),而不是tags数组中名称与hanks非常匹配的单个对象!这两种方法都很有效。实际上,要构建它,为什么需要标记:{$elemMatch:{name:{Bob D}除了db.col.find({“tags.name”:“Bob D”}之外,我知道如果不包括elemMath,我将返回整个文档,而不仅仅是与name匹配的对象。find()的第二个参数
表示一个投影,它允许您重塑存储在数据库中的文档。非常感谢!这两种方法都很有效。事实上,要构建这个投影,除了db.col.find({“tags.name”:“Bob D”}之外,还需要标记:{$elemMatch:{name:{Bob D:}?我知道如果我不包括elemMath,我会取回整个文档,而不仅仅是与name匹配的对象。find()
的第二个参数表示一个投影,它允许您重塑存储在db中的文档的形状