【问题标题】:Nested document query MongoDB C#嵌套文档查询 MongoDB C#
【发布时间】:2017-09-18 07:30:07
【问题描述】:

我有以下个人文档

{
name:"John",
address:[
{
street:"1 abc",
city:"delhi"
},
{
street:"1 xyz",
city:"mumbai"
},
]
}

我必须找到所有属于 cites delhi 和 mumbai 的人

我使用 MongoDB C# 2.4 驱动程序编写了查询

string[] cities = new string[] { "delhi", "mumbai" };
var cityFilter =Builders<Person>.Filter.Eq("address.city",cities); 
   var person = database.GetCollection<Person>("Person").Find(cityFilter).ToList();

查询无异常执行,但没有得到任何结果。

【问题讨论】:

  • 您的意思可能是$in$all。我取决于您的意思是“两者”还是“两者”。
  • 我的意思是全部,但是当我调用 All System.InvalidOperationException 时会抛出异常:字段“address.city”的序列化程序必须实现 IBsonArraySerializer 并提供项目序列化信息。
  • 那为什么您的问题没有提及任何异常和实际消息或显示任何使用All 的尝试?也许您应该将此信息添加到您的问题中。
  • 根据您的评论,我使用了引发异常的 All 方法,但我在问题中编写的查询并非如此
  • 我在你的问题中没有看到这样的代码。这是你需要展示它的地方。我们不能只是跑过去看看你的办公桌。除非你在这里展示它,否则我们不知道你做了什么。

标签: c# mongodb mongodb-query mongodb-.net-driver


【解决方案1】:

这里是解决方案:

var cityFilter = Builders<Person>.Filter.ElemMatch(y => y.addresses, x => cities.Contains(x.city));

【讨论】:

  • 谢谢@BOR4 我试过这个,但它给出的 OR 结果意味着有德里或孟买的人。我想要德里和孟买的人。
  • 哦,我没有正确理解你。我会修复它并发布更新。
猜你喜欢
  • 2015-02-10
  • 2021-02-25
  • 2016-08-16
  • 2018-03-09
  • 1970-01-01
  • 1970-01-01
  • 2023-03-08
  • 2017-04-10
相关资源
最近更新 更多