我有一个奇怪的问题,查询mongo ..我插入了一堆像这样的记录;
{
"_id" : "1f0aad54-85ef-446c-a02b-76bb0235e49c",
"internalId" : new BinData(3, "VP0LH++FbESgK3a7AjXknA=="),
"Data" : [
["otherId", "5e3b3293-ec93-469a-ba46-101a1feb1155"],
["test", "test"],
["test2", "test2"]
]
}
然后我做一个简单的查询;
db.testCollection.find("Data.otherId" : "5e3b3293-ec93-469a-ba46-101a1feb1155")
另一个是.net guid.ToString() - 几个随机的显然..有时这些返回。有时候他们没有。 db.find()显示它们,但显式查询它似乎随机返回0行。
我无法解释为什么查询会间歇性地找不到这些内容。我已经在我的分片群集和我的本地实例上测试了这个,这只是开箱即用的香草。
有没有人遇到过这个?
答案 0 :(得分:1)
你使用了错误的选择器。如果您的数据是:
{
"_id" : "1f0aad54-85ef-446c-a02b-76bb0235e49c",
"internalId" : new BinData(3, "VP0LH++FbESgK3a7AjXknA=="),
"Data" : {
"otherId" "5e3b3293-ec93-469a-ba46-101a1feb1155",
"test": "test",
"test2": "test2"
}
}
该选择器是正确的,但你有数组,所以你应该使用这个选择器:
db.testCollection.find({"Data.0" : ["otherId","5e3b3293-ec93-469a-ba46-101a1feb1155"]})
(我刚试过它)
答案 1 :(得分:0)
我遇到了同样的问题,结果发现它与Mongo无关,但在调用Node.js应用程序时是一个异步竞争条件。
我不知不觉地只使用一个程序样式来执行一条路径,因此insert和select查询没有按照我想象的顺序运行。插入是异步的,但是选择是在外部方法中运行,而不是在回调中。有时插入确实首先到达那里,可能是由于Node中的一些嘀嗒机制的怪癖。
在C#中我认为async / await模式不太容易出现这种错误,因为更明确的await语法,实际上导致了程序化的代码,并且不依赖于嵌套回调。但也许它仍然可能像我一样愚蠢。