MongoDB查询-嵌套对象

MongoDB查询-嵌套对象,mongodb,mongodb-query,mongo-shell,Mongodb,Mongodb Query,Mongo Shell,我试图检索嵌套对象中属性值之一以“-”开头的所有文档。下面是示例文档-我想搜索“counts”数组对象,并查找嵌套对象中的任何“value”属性是否以“-”开头 我已经试过了,但是运气不好- db.myCollection.find( {departureDate: "2020-10-09"}, { "travelerCounts": { "$elemMatch": { "tr

我试图检索嵌套对象中属性值之一以“-”开头的所有文档。下面是示例文档-我想搜索“counts”数组对象,并查找嵌套对象中的任何“value”属性是否以“-”开头

我已经试过了,但是运气不好-

db.myCollection.find(
{departureDate: "2020-10-09"},
{
    "travelerCounts": { 
        "$elemMatch": {
            "travelCountType": "ActualCapacity",
            "counts": {
                "$elemMatch": {
                    "value": { $regex : /^-/ }
                }
            }
        }
    }
})
请帮助

作为官方声明:

如果在$elemMatch表达式中仅指定一个条件,并且未在$elemMatch中使用$not或$ne运算符,则可以省略$elemMatch。请参阅单个查询条件

这适用于检索至少一个嵌套文档包含以破折号开头的值的所有文档:

collection.find({"departureDate": "2020-10-09", "travelerCounts.counts.value": {"$regex" : /^-/}})
在您的示例中,您正在为过滤器使用投影参数(find方法中的第二个参数),这是不正确的

编辑:用于检索嵌套travelerCounts中至少有一个文档且满足以下条件的所有集合文档的解决方案:

  • travelCountType为“实际容量”
  • 计数至少包含一个值以破折号开头的文档
查询:

collection.find({"departureDate": "2020-10-09", "travelerCounts": {"$elemMatch": {"travelCountType": "ActualCapacity", "counts.value": {"$regex" : /^-/}}}})

您最好将该值存储为数字,并与
$lt:0
进行比较是的,我同意,但这是在生产中,我们无法更改数据类型谢谢,但这不起作用。我必须匹配“travelCountType”:“实际容量”。travelerCounts是一个数组,它有一个数组“count”对象和“travelCountType”属性。您可以添加多个“和”条件:collection.find({“departureDate”:“2020-10-09”,“travelerCounts.travelCountType”:“ActualCapacity”,“travelerCounts.counts.value”:{“$regex”:/^-/})谢谢,仍然没有工作。TravelerCounts是一个数组,它可以包含多个对象。我不熟悉这一点,我认为我们需要确定travelCountType为“ActualCapacity”的元素,然后在将成为“count”数组的元素中,我们需要搜索以“-”开头的“value”属性。我们需要使用位置运算符吗?我想我终于理解了这个问题,试试这个:collection.find({“departureDate”:“2020-10-09”,“travelerCounts”:{“$elemMatch”:{“travelCountType”:“ActualCapacity”,“counts.value”:{“$regex”:/^-/}}})。我将编辑答案以包含此解决方案。
collection.find({"departureDate": "2020-10-09", "travelerCounts": {"$elemMatch": {"travelCountType": "ActualCapacity", "counts.value": {"$regex" : /^-/}}}})