如何查询MongoDB的嵌入式数组
Posted
技术标签:
【中文标题】如何查询MongoDB的嵌入式数组【英文标题】:How to query Mongodb for embedded array 【发布时间】:2016-10-26 16:10:16 【问题描述】:我有一个类似 mongodb 的结构。
场所模型的结构
.....
amenities: [
name: "wifi",
is_free: true
,
name: "projector",
is_free: false,
price: "50"
,
...........
...........
...........
]
.....
我想查询哪里,我想搜索一个地方,该地方有一些便利设施,而与price & is_free
字段无关。如何在 mongodb / mongoose 查询中执行此操作。
我想要列出有 wifi 和 投影仪作为输出。
【问题讨论】:
你的问题不清楚。所以你已经尝试过和预期的结果。 你想找出那些有价格和is_free的便利设施 价格和 is_free 无关紧要。我想要有“wifi”和“投影仪”等便利设施的地方。 我已经修改了问题。请看一看。 @Shrabanee How to search in array of object in mongodb的可能重复 【参考方案1】:尝试以下查询以获取name
的一个选项:
db.places.find(amenities: $exists: true, 'amenities.name':'wifi')
也可以试试这个查询,如果有多个选项来检查name
:-
var findQuery = amenities: $exists: true, 'amenities.name':'wifi' , 'amenities.name':'projector'
db.places.find(findQuery);
希望这会对你有所帮助。
【讨论】:
它不能解决我的问题。请查看多个选项,它会导致一个空数组。甚至我的数据库也与查询匹配。 根据您的要求更新了查询。我认为您的问题不够清楚,无法让某人一口气帮助您。【参考方案2】:db.places.find($and: ['amenities.name': 'wifi', 'amenities.name':'projector'])
它将找到在数组['wifi', 'projector']
中指定了所有赦免的地方。
希望对你有帮助。
【讨论】:
不仅有便利设施。但它应该有特定的便利设施。你的回答不能解决我的问题 找到那些在数组中指定了所有功能的地方,例如:['wifi', 'loudspeakers', 'phone']。是你需要的吗? 是的!这就是我想要的。但是您的查询没有这样做。它将仅搜索已提交的便利设施是否存在。 @AkhilP,这个问题解释性不够。但是,我已经编辑了我的答案。如果有帮助,请看看。 我认为没有$and
也可以。只需使用两个条件两个find即可。【参考方案3】:
请尝试执行以下查询
db.places.find(
amenities :
$exist : true
,
amenities :
$elemMatch :
name :
$in : ['wifi', 'projector']
)
在上述查询中,$exists 运算符将检查文档中是否存在便利设施字段,$elemMatch 运算符将匹配包含具有以下值的名称字段的便利设施数组
(1) 无线网络
(2) 投影仪
【讨论】:
请记住,这将只返回第一个匹配的元素elemMatch
特定的 :-)
返回的文件至少与$in : ['wifi', 'projector']
中的一项设施相匹配。但我想要的文件必须同时拥有['wifi', 'projector']
以上是关于如何查询MongoDB的嵌入式数组的主要内容,如果未能解决你的问题,请参考以下文章