【问题标题】:Invalid query in mongo c#mongo c#中的无效查询
【发布时间】:2016-08-10 13:23:41
【问题描述】:

我有这个查询:

string jsonquery = "{
$and : [{
        WordsData : {
            $elemMatch : {
                UserId : ObjectId('57a87f5cc48933119cb96f93'),
                UserId : ObjectId('57a87f5cc48933119cb96f94')
            }
        }
    }, {
        WordsData : {
            $not : {
                $elemMatch : {
                    MatchType : 2
                }
            }
        }
    }
]
}"

如果我在 mongo 控制台中执行它可以正常工作!
我正在尝试在 c# 程序中运行此查询。运行相同的 json 查询我得到以下错误:

BsonDocument doc = BsonSerializer.Deserialize<BsonDocument>(jsonquery);
[Error] --> {"Duplicate element name 'UserId'."}

为什么在 c# 中不起作用?

【问题讨论】:

  • 您的$elemMatch 对象中不能有两个UserId 字段。 shell 只是忽略其中一个。
  • 为什么这个问题只出现在 .NET 中?因为相同的查询可以正常工作,例如在 RoboMongo 客户端控制台中!如何在不为同一个 $elemMatch 多次传递“UserId”的情况下获得相同的结果?我想要做的是一个查询,它返回 WordsData 数组中的所有文档,其中一个元素为 UserId = {57a87f5cc48933119cb96f93},另一个元素为 UserId = {57a87f5cc48933119cb96f94}
  • 你能发布示例文档吗?
  • @profesor79:见我之前的帖子Possible query with MongoDB

标签: c# .net mongodb


【解决方案1】:

您需要在$and 表达式中嵌套多个$elemMatch。有关示例,请参阅此 this thread

将 JSON 视为一个映射 - 如果您有重复的键,它们将相互覆盖并导致错误和/或意外结果。

【讨论】:

  • 你的建议是这样的:{ $and: [{ WordsData: { $elemMatch: { UserId: ObjectId(\"{0}\") } } },{ WordsData: { $elemMatch: { UserId: ObjectId(\"{1}\") } } }
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多