5
如果我具有與以下類似結構的文檔。我正在用計算結果更新它們,我想知道結果是否已經插入到文檔中。假設我爲每個文檔運行計算'c'和計算'd'。現在我想顯示所有文檔的表格並顯示是否已經執行了計算'd'。對於這張表我不關心計算'c'。如何投影字段是否存在
{
"_id":1
"a":1,
"resultsOfComputation":{
"c":{large embedded document},
"d":{large embedded document}
}
}
{
"_id":2
"a":1,
"resultsOfComputation":{
"c":{large embedded document}
}
}
我想得到一個結果,告訴我文檔是否包含特定字段。例如,我想知道它是否包含字段「resultsOfComputation.d」,無論該字段的值是多少。
的查詢「resultsOfComputation.d」的結果的一個例子是:
{
"_id":1
"a":1,
"resultsOfComputation":{
"d":true
}
}
{
"_id":2
"resultsOfComputation":{
"d":false
}
}
如果「resultsOfComputation.d」是不是也可以未定義文件,這也是正常的:
{
"_id":1
"a":1,
"resultsOfComputation":{
"d":true
}
}
{
"_id":2
"a":1,
"resultsOfComputation":{}
}
在一般情況下,這個想法是讓文件的所有根元素,但只有真/假/未定義計算的選擇(之一)的結果,因爲計算的結果是一個大的嵌入文檔。
我爲此查詢交口稱讚!哇!只是哇!但是,你能幫我理解一下'$ gt'是如何輸出真或假的? – Nattyk
這[鏈接的答案](http://stackoverflow.com/a/29837432/122005)解釋了這一切。 – chridam
這個答案很有用,不幸的是,使用聚合對我來說相當緩慢,特別是當我添加跳到管道時。最後,我只使用了find而不是aggregate,使用包含文檔的所有根元素和一個字段的投影,我知道這些字段總是位於「resultsOfComputation.d」中,然後檢查該字段是否未定義。 – Marcel