如何使用 MongoDB 数组进行更新插入?

时间:2021-07-02 13:13:00

标签: arrays mongodb mongodb-query

我正在尝试插入、更新 MongoDB 数组中的值。
我的MongoDB版本是4.0.5。

这是我的收藏:

ion2 = np.array([[3.42810e-11 8.69318e-10 1.44971e-08 1.67311e-07 1.39879e-06 8.81516e-06
 4.33870e-05 1.72188e-04 5.67105e-04 1.59057e-03 3.88708e-03 8.44507e-03
 1.65984e-02 2.99591e-02 5.02987e-02 7.94091e-02 1.18972e-01 1.70450e-01
 2.35000e-01 3.13401e-01 4.05991e-01 5.12606e-01 6.32538e-01 7.64520e-01
 9.06746e-01 1.05692e+00 1.21238e+00 1.37018e+00 1.52728e+00 1.68066e+00
 1.82748e+00 1.96519e+00 2.09158e+00 2.20490e+00 2.30384e+00 2.38756e+00
 2.45562e+00 2.50802e+00 2.54505e+00 2.56734e+00 2.57569e+00 2.57112e+00
 2.55474e+00 2.52772e+00 2.49129e+00 2.44665e+00 2.39498e+00 2.33739e+00
 2.27494e+00 2.20862e+00 2.13931e+00 2.06782e+00 1.99487e+00 1.92111e+00
 1.84708e+00 1.77328e+00 1.70011e+00 1.62793e+00 1.55702e+00 1.48764e+00
 1.41997e+00 1.35416e+00 1.29033e+00 1.22857e+00 1.16894e+00]
[3.83785e-11 9.59143e-10 1.57842e-08 1.79974e-07 1.48821e-06 9.28633e-06
 4.53063e-05 1.78436e-04 5.83877e-04 1.62878e-03 3.96289e-03 8.57921e-03
 1.68144e-02 3.02814e-02 5.07508e-02 8.00130e-02 1.19748e-01 1.71417e-01
 2.36176e-01 3.14805e-01 4.07637e-01 5.14508e-01 6.34706e-01 7.66960e-01
 9.09457e-01 1.05990e+00 1.21561e+00 1.37364e+00 1.53095e+00 1.68452e+00
 1.83149e+00 1.96931e+00 2.09579e+00 2.20916e+00 2.30813e+00 2.39184e+00
 2.45988e+00 2.51222e+00 2.54918e+00 2.57138e+00 2.57964e+00 2.57496e+00
 2.55846e+00 2.53132e+00 2.49476e+00 2.45000e+00 2.39820e+00 2.34049e+00
 2.27792e+00 2.21148e+00 2.14205e+00 2.07045e+00 1.99740e+00 1.92353e+00
 1.84941e+00 1.77551e+00 1.70225e+00 1.62998e+00 1.55900e+00 1.48953e+00
 1.42178e+00 1.35589e+00 1.29199e+00 1.23017e+00 1.17047e+00]
[4.39444e-11 1.08009e-09 1.75021e-08 1.96729e-07 1.60552e-06 9.89942e-06
 4.77852e-05 1.86456e-04 6.05290e-04 1.67736e-03 4.05903e-03 8.74904e-03
 1.70877e-02 3.06891e-02 5.13232e-02 8.07786e-02 1.20734e-01 1.72649e-01
 2.37679e-01 3.16604e-01 4.09756e-01 5.16967e-01 6.37523e-01 7.70145e-01
 9.13014e-01 1.06382e+00 1.21988e+00 1.37825e+00 1.53586e+00 1.68969e+00
 1.83689e+00 1.97490e+00 2.10151e+00 2.21498e+00 2.31400e+00 2.39771e+00
 2.46572e+00 2.51800e+00 2.55488e+00 2.57696e+00 2.58508e+00 2.58025e+00
 2.56358e+00 2.53628e+00 2.49954e+00 2.45459e+00 2.40261e+00 2.34472e+00
 2.28198e+00 2.21536e+00 2.14577e+00 2.07400e+00 2.00080e+00 1.92678e+00
 1.85251e+00 1.77847e+00 1.70508e+00 1.63269e+00 1.56158e+00 1.49199e+00
 1.42413e+00 1.35814e+00 1.29413e+00 1.23220e+00 1.17241e+00]
[5.16737e-11 1.24639e-09 1.98408e-08 2.19309e-07 1.76203e-06 1.07094e-05
 5.10309e-05 1.96872e-04 6.32926e-04 1.73974e-03 4.18203e-03 8.96577e-03
 1.74360e-02 3.12083e-02 5.20518e-02 8.17536e-02 1.21990e-01 1.74220e-01
 2.39600e-01 3.18906e-01 4.12472e-01 5.20126e-01 6.41149e-01 7.74256e-01
 9.17616e-01 1.06892e+00 1.22545e+00 1.38427e+00 1.54230e+00 1.69650e+00
 1.84402e+00 1.98230e+00 2.10912e+00 2.22274e+00 2.32186e+00 2.40562e+00
 2.47362e+00 2.52584e+00 2.56262e+00 2.58457e+00 2.59253e+00 2.58751e+00
 2.57064e+00 2.54311e+00 2.50614e+00 2.46096e+00 2.40873e+00 2.35059e+00
 2.28761e+00 2.22075e+00 2.15093e+00 2.07894e+00 2.00551e+00 1.93128e+00
 1.85680e+00 1.78257e+00 1.70899e+00 1.63641e+00 1.56513e+00 1.49538e+00
 1.42735e+00 1.36121e+00 1.29705e+00 1.23498e+00 1.17505e+00]
[6.27218e-11 1.48122e-09 2.31011e-08 2.50369e-07 1.97435e-06 1.17933e-05
 5.53184e-05 2.10473e-04 6.68650e-04 1.81973e-03 4.33871e-03 9.24053e-03
 1.78759e-02 3.18626e-02 5.29690e-02 8.29797e-02 1.23569e-01 1.76196e-01
 2.42015e-01 3.21803e-01 4.15892e-01 5.24107e-01 6.45724e-01 7.79447e-01
 9.23437e-01 1.07537e+00 1.23252e+00 1.39192e+00 1.55049e+00 1.70519e+00
 1.85315e+00 1.99179e+00 2.11892e+00 2.23277e+00 2.33204e+00 2.41588e+00
 2.48391e+00 2.53609e+00 2.57278e+00 2.59459e+00 2.60237e+00 2.59713e+00
 2.58002e+00 2.55222e+00 2.51497e+00 2.46948e+00 2.41695e+00 2.35850e+00
 2.29521e+00 2.22804e+00 2.15791e+00 2.08562e+00 2.01190e+00 1.93739e+00
 1.86264e+00 1.78814e+00 1.71431e+00 1.64148e+00 1.56996e+00 1.49998e+00
 1.43173e+00 1.36537e+00 1.30101e+00 1.23874e+00 1.17861e+00]
[7.89985e-11 1.82139e-09 2.77384e-08 2.93685e-07 2.26445e-06 1.32441e-05
 6.09453e-05 2.28007e-04 7.13992e-04 1.91995e-03 4.53304e-03 9.57870e-03
 1.84146e-02 3.26611e-02 5.40865e-02 8.44737e-02 1.25496e-01 1.78610e-01
 2.44973e-01 3.25359e-01 4.20100e-01 5.29017e-01 6.51376e-01 7.85874e-01
 9.30655e-01 1.08337e+00 1.24130e+00 1.40145e+00 1.56072e+00 1.71605e+00
 1.86457e+00 2.00369e+00 2.13121e+00 2.24537e+00 2.34486e+00 2.42884e+00
 2.49692e+00 2.54909e+00 2.58569e+00 2.60735e+00 2.61493e+00 2.60944e+00
 2.59204e+00 2.56392e+00 2.52633e+00 2.48048e+00 2.42757e+00 2.36875e+00
 2.30507e+00 2.23752e+00 2.16700e+00 2.09434e+00 2.02024e+00 1.94537e+00
 1.87027e+00 1.79543e+00 1.72126e+00 1.64811e+00 1.57628e+00 1.50600e+00
 1.43746e+00 1.37082e+00 1.30619e+00 1.24365e+00 1.18327e+00]
[1.03561e-10 2.32204e-09 3.43772e-08 3.53870e-07 2.65514e-06 1.51384e-05
 6.80805e-05 2.49663e-04 7.68749e-04 2.03878e-03 4.76025e-03 9.97026e-03
 1.90346e-02 3.35783e-02 5.53713e-02 8.61977e-02 1.27731e-01 1.81432e-01
 2.48455e-01 3.29579e-01 4.25131e-01 5.34925e-01 6.58217e-01 7.93688e-01
 9.39465e-01 1.09318e+00 1.25209e+00 1.41317e+00 1.57332e+00 1.72945e+00
 1.87868e+00 2.01841e+00 2.14644e+00 2.26099e+00 2.36077e+00 2.44494e+00
 2.51310e+00 2.56527e+00 2.60178e+00 2.62327e+00 2.63061e+00 2.62484e+00
 2.60710e+00 2.57860e+00 2.54059e+00 2.49431e+00 2.44095e+00 2.38165e+00
 2.31749e+00 2.24947e+00 2.17848e+00 2.10534e+00 2.03078e+00 1.95545e+00
 1.87991e+00 1.80464e+00 1.73005e+00 1.65649e+00 1.58426e+00 1.51360e+00
 1.44469e+00 1.37769e+00 1.31271e+00 1.24984e+00 1.18914e+00]
[1.40928e-10 3.05517e-09 4.36981e-08 4.34668e-07 3.15633e-06 1.74643e-05
 7.64979e-05 2.74340e-04 8.29401e-04 2.16758e-03 5.00287e-03 1.03848e-02
 1.96894e-02 3.45497e-02 5.67424e-02 8.80578e-02 1.30177e-01 1.84564e-01
 2.52381e-01 3.34406e-01 4.30962e-01 5.41854e-01 6.66324e-01 8.03031e-01
 9.50076e-01 1.10507e+00 1.26522e+00 1.42750e+00 1.58877e+00 1.74593e+00
 1.89607e+00 2.03658e+00 2.16526e+00 2.28032e+00 2.38048e+00 2.46489e+00
 2.53317e+00 2.58534e+00 2.62175e+00 2.64304e+00 2.65010e+00 2.64397e+00
 2.62581e+00 2.59685e+00 2.55833e+00 2.51150e+00 2.45757e+00 2.39770e+00
 2.33295e+00 2.26433e+00 2.19274e+00 2.11901e+00 2.04387e+00 1.96797e+00
 1.89187e+00 1.81604e+00 1.74092e+00 1.66685e+00 1.59413e+00 1.52298e+00
 1.45360e+00 1.38615e+00 1.32073e+00 1.25744e+00 1.19633e+00]
[1.95936e-10 4.07531e-09 5.59097e-08 5.34217e-07 3.73829e-06 2.00230e-05
 8.53381e-05 2.99308e-04 8.89090e-04 2.29208e-03 5.23537e-03 1.07820e-02
 2.03216e-02 3.55006e-02 5.81095e-02 8.99529e-02 1.32725e-01 1.87903e-01
 2.56657e-01 3.39767e-01 4.37553e-01 5.49807e-01 6.75749e-01 8.14012e-01
 9.62664e-01 1.11928e+00 1.28103e+00 1.44485e+00 1.60757e+00 1.76606e+00
 1.91738e+00 2.05893e+00 2.18847e+00 2.30422e+00 2.40489e+00 2.48964e+00
 2.55811e+00 2.61031e+00 2.64661e+00 2.66768e+00 2.67440e+00 2.66783e+00
 2.64915e+00 2.61960e+00 2.58044e+00 2.53293e+00 2.47829e+00 2.41768e+00
 2.35218e+00 2.28280e+00 2.21046e+00 2.13598e+00 2.06010e+00 1.98347e+00
 1.90665e+00 1.83014e+00 1.75434e+00 1.67961e+00 1.60625e+00 1.53449e+00
 1.46452e+00 1.39649e+00 1.33053e+00 1.26670e+00 1.20508e+00]
[2.69366e-10 5.33993e-09 6.99560e-08 6.40839e-07 4.32308e-06 2.24609e-05
 9.34236e-05 3.21516e-04 9.41393e-04 2.40086e-03 5.44012e-03 1.11378e-02
 2.09015e-02 3.63978e-02 5.94392e-02 9.18528e-02 1.35354e-01 1.91440e-01
 2.61290e-01 3.45691e-01 4.44958e-01 5.58868e-01 6.86615e-01 8.26799e-01
 9.77446e-01 1.13608e+00 1.29985e+00 1.46562e+00 1.63018e+00 1.79038e+00
 1.94325e+00 2.08614e+00 2.21682e+00 2.33350e+00 2.43489e+00 2.52015e+00
 2.58891e+00 2.64121e+00 2.67744e+00 2.69827e+00 2.70461e+00 2.69754e+00
 2.67824e+00 2.64799e+00 2.60805e+00 2.55970e+00 2.50417e+00 2.44264e+00
 2.37620e+00 2.30587e+00 2.23257e+00 2.15714e+00 2.08032e+00 2.00277e+00
 1.92505e+00 1.84765e+00 1.77099e+00 1.69543e+00 1.62126e+00 1.54872e+00
 1.47799e+00 1.40925e+00 1.34258e+00 1.27809e+00 1.21583e+00]
[3.53215e-10 6.67117e-09 8.36649e-08 7.38322e-07 4.83086e-06 2.45029e-05
 1.00062e-04 3.39668e-04 9.84550e-04 2.49253e-03 5.61787e-03 1.14578e-02
 2.14427e-02 3.72663e-02 6.07708e-02 9.38138e-02 1.38140e-01 1.95269e-01
 2.66398e-01 3.52321e-01 4.53347e-01 5.69234e-01 6.99150e-01 8.41651e-01
 9.94718e-01 1.15582e+00 1.32205e+00 1.49021e+00 1.65706e+00 1.81939e+00
 1.97419e+00 2.11880e+00 2.25096e+00 2.36886e+00 2.47120e+00 2.55716e+00
 2.62637e+00 2.67889e+00 2.71511e+00 2.73573e+00 2.74168e+00 2.73405e+00
 2.71405e+00 2.68298e+00 2.64212e+00 2.59276e+00 2.53617e+00 2.47352e+00
 2.40594e+00 2.33444e+00 2.25997e+00 2.18337e+00 2.10539e+00 2.02669e+00
 1.94784e+00 1.86935e+00 1.79162e+00 1.71503e+00 1.63985e+00 1.56634e+00
 1.49468e+00 1.42503e+00 1.35751e+00 1.29219e+00 1.22913e+00]
[4.33867e-10 7.86467e-09 9.52672e-08 8.17475e-07 5.23348e-06 2.61122e-05
 1.05347e-04 3.54463e-04 1.02092e-03 2.57285e-03 5.78008e-03 1.17614e-02
 2.19748e-02 3.81470e-02 6.21565e-02 9.58983e-02 1.41152e-01 1.99468e-01
 2.72064e-01 3.59741e-01 4.62805e-01 5.80996e-01 7.13444e-01 8.58663e-01
 1.01458e+00 1.17859e+00 1.34773e+00 1.51875e+00 1.68834e+00 1.85323e+00
 2.01037e+00 2.15708e+00 2.29105e+00 2.41047e+00 2.51404e+00 2.60093e+00
 2.67078e+00 2.72365e+00 2.75996e+00 2.78042e+00 2.78599e+00 2.77778e+00
 2.75703e+00 2.72504e+00 2.68314e+00 2.63265e+00 2.57482e+00 2.51087e+00
 2.44194e+00 2.36906e+00 2.29320e+00 2.21520e+00 2.13582e+00 2.05574e+00
 1.97554e+00 1.89571e+00 1.81670e+00 1.73885e+00 1.66246e+00 1.58777e+00
 1.51499e+00 1.44426e+00 1.37569e+00 1.30937e+00 1.24536e+00]
[5.02258e-10 8.83411e-09 1.04447e-07 8.79567e-07 5.55196e-06 2.74142e-05
 1.09766e-04 3.67326e-04 1.05384e-03 2.64842e-03 5.93802e-03 1.20657e-02
 2.25214e-02 3.90696e-02 6.36314e-02 9.81461e-02 1.44436e-01 2.04085e-01
 2.78340e-01 3.68012e-01 4.73403e-01 5.94230e-01 7.29587e-01 8.77931e-01
 1.03712e+00 1.20450e+00 1.37700e+00 1.55131e+00 1.72406e+00 1.89190e+00
 2.05177e+00 2.20090e+00 2.33699e+00 2.45820e+00 2.56322e+00 2.65121e+00
 2.72184e+00 2.77517e+00 2.81165e+00 2.83200e+00 2.83719e+00 2.82838e+00
 2.80682e+00 2.77385e+00 2.73081e+00 2.67904e+00 2.61983e+00 2.55442e+00
 2.48396e+00 2.40951e+00 2.33204e+00 2.25243e+00 2.17144e+00 2.08976e+00
 2.00798e+00 1.92661e+00 1.84609e+00 1.76677e+00 1.68897e+00 1.61291e+00
 1.53881e+00 1.46681e+00 1.39703e+00 1.32955e+00 1.26443e+00]
[5.58622e-10 9.62504e-09 1.11976e-07 9.31502e-07 5.82650e-06 2.85787e-05
 1.13877e-04 3.79750e-04 1.08674e-03 2.72615e-03 6.10446e-03 1.23929e-02
 2.31185e-02 4.00913e-02 6.52837e-02 1.00689e-01 1.48181e-01 2.09390e-01
 2.85594e-01 3.77622e-01 4.85767e-01 6.09720e-01 7.48524e-01 9.00570e-01
 1.06363e+00 1.23496e+00 1.41141e+00 1.58957e+00 1.76597e+00 1.93723e+00
 2.10019e+00 2.25206e+00 2.39051e+00 2.51367e+00 2.62024e+00 2.70939e+00
 2.78079e+00 2.83453e+00 2.87106e+00 2.89116e+00 2.89582e+00 2.88622e+00
 2.86365e+00 2.82947e+00 2.78505e+00 2.73177e+00 2.67093e+00 2.60380e+00
 2.53156e+00 2.45528e+00 2.37595e+00 2.29447e+00 2.21162e+00 2.12809e+00
 2.04450e+00 1.96135e+00 1.87909e+00 1.79810e+00 1.71866e+00 1.64105e+00
 1.56544e+00 1.49200e+00 1.42085e+00 1.35205e+00 1.28568e+00]
[6.09836e-10 1.03548e-08 1.19101e-07 9.82265e-07 6.10463e-06 2.98013e-05
 1.18336e-04 3.93619e-04 1.12435e-03 2.81674e-03 6.30146e-03 1.27850e-02
 2.38414e-02 4.13384e-02 6.73143e-02 1.03832e-01 1.52833e-01 2.16006e-01
 2.94670e-01 3.89672e-01 5.01297e-01 6.29197e-01 7.72349e-01 9.29051e-01
 1.09697e+00 1.27324e+00 1.45458e+00 1.63748e+00 1.81835e+00 1.99373e+00
 2.16039e+00 2.31549e+00 2.45664e+00 2.58200e+00 2.69023e+00 2.78053e+00
 2.85259e+00 2.90652e+00 2.94284e+00 2.96233e+00 2.96604e+00 2.95519e+00
 2.93111e+00 2.89520e+00 2.84887e+00 2.79352e+00 2.73051e+00 2.66112e+00
 2.58656e+00 2.50793e+00 2.42624e+00 2.34240e+00 2.25721e+00 2.17140e+00
 2.08556e+00 2.00023e+00 1.91587e+00 1.83283e+00 1.75145e+00 1.67196e+00
 1.59457e+00 1.51944e+00 1.44667e+00 1.37636e+00 1.30854e+00]
[6.66522e-10 1.11792e-08 1.27346e-07 1.04251e-06 6.44267e-06 3.13184e-05
 1.23963e-04 4.11341e-04 1.17283e-03 2.93418e-03 6.55760e-03 1.32954e-02
 2.47823e-02 4.29598e-02 6.99502e-02 1.07904e-01 1.58847e-01 2.24540e-01
 3.06351e-01 4.05150e-01 5.21207e-01 6.54123e-01 8.02788e-01 9.65386e-01
 1.13945e+00 1.32195e+00 1.50947e+00 1.69835e+00 1.88487e+00 2.06545e+00
 2.23676e+00 2.39591e+00 2.54047e+00 2.66856e+00 2.77884e+00 2.87054e+00
 2.94336e+00 2.99746e+00 3.03339e+00 3.05200e+00 3.05438e+00 3.04180e+00
 3.01565e+00 2.97738e+00 2.92845e+00 2.87031e+00 2.80436e+00 2.73192e+00
 2.65424e+00 2.57245e+00 2.48760e+00 2.40062e+00 2.31233e+00 2.22347e+00
 2.13468e+00 2.04648e+00 1.95934e+00 1.87365e+00 1.78972e+00 1.70781e+00
 1.62812e+00 1.55080e+00 1.47598e+00 1.40373e+00 1.33410e+00]
[7.41536e-10 1.22743e-08 1.38343e-07 1.12313e-06 6.89578e-06 3.33504e-05
 1.31475e-04 4.34866e-04 1.23668e-03 3.08743e-03 6.88846e-03 1.39476e-02
 2.59714e-02 4.49874e-02 7.32129e-02 1.12897e-01 1.66157e-01 2.34831e-01
 3.20341e-01 4.23576e-01 5.44790e-01 6.83525e-01 8.38578e-01 1.00801e+00
 1.18920e+00 1.37896e+00 1.57372e+00 1.76964e+00 1.96287e+00 2.14969e+00
 2.32669e+00 2.49088e+00 2.63978e+00 2.77146e+00 2.88459e+00 2.97839e+00
 3.05258e+00 3.10735e+00 3.14329e+00 3.16130e+00 3.16252e+00 3.14827e+00
 3.12000e+00 3.07921e+00 3.02743e+00 2.96614e+00 2.89681e+00 2.82081e+00
 2.73943e+00 2.65385e+00 2.56514e+00 2.47429e+00 2.38215e+00 2.28947e+00
 2.19692e+00 2.10506e+00 2.01436e+00 1.92523e+00 1.83799e+00 1.75291e+00
 1.67020e+00 1.59001e+00 1.51246e+00 1.43764e+00 1.36560e+00]])
ne = np.array([5.73615251e+16 1.08263673e+17 2.04335972e+17 3.85662042e+17
 7.27895384e+17 1.37382380e+18 2.59294380e+18 4.89390092e+18
 9.23670857e+18 1.74332882e+19 3.29034456e+19 6.21016942e+19
 1.17210230e+20 2.21221629e+20 4.17531894e+20 7.88046282e+20
 1.48735211e+21])
Te = np.array([1.00000000e+00 1.15478198e+00 1.33352143e+00 1.53992653e+00
 1.77827941e+00 2.05352503e+00 2.37137371e+00 2.73841963e+00
 3.16227766e+00 3.65174127e+00 4.21696503e+00 4.86967525e+00
 5.62341325e+00 6.49381632e+00 7.49894209e+00 8.65964323e+00
 1.00000000e+01 1.15478198e+01 1.33352143e+01 1.53992653e+01
 1.77827941e+01 2.05352503e+01 2.37137371e+01 2.73841963e+01
 3.16227766e+01 3.65174127e+01 4.21696503e+01 4.86967525e+01
 5.62341325e+01 6.49381632e+01 7.49894209e+01 8.65964323e+01
 1.00000000e+02 1.15478198e+02 1.33352143e+02 1.53992653e+02
 1.77827941e+02 2.05352503e+02 2.37137371e+02 2.73841963e+02
 3.16227766e+02 3.65174127e+02 4.21696503e+02 4.86967525e+02
 5.62341325e+02 6.49381632e+02 7.49894209e+02 8.65964323e+02
 1.00000000e+03 1.15478198e+03 1.33352143e+03 1.53992653e+03
 1.77827941e+03 2.05352503e+03 2.37137371e+03 2.73841963e+03
 3.16227766e+03 3.65174127e+03 4.21696503e+03 4.86967525e+03
 5.62341325e+03 6.49381632e+03 7.49894209e+03 8.65964323e+03
 1.00000000e+04])

我正在尝试进行一些 upsert 查询以插入/更新到数组中,但在那之前我没有找到好的解决方案。

我的过滤器是:

  • { 'id': 1, 'array': [{ 'code': 'a' }, { 'code': 'b' }] } (指向正确的文档)
  • 'id'(指向正确的数组单元)
  1. 如果文档存在于集合中,但没有带有 'array.code' 的单元格
'code': 'c'

我没有错误,但也没有更新。
我想像这样在数组中插入元素:

db.test.update({
        'id': 1
    }, {
        $set: {'array.$[elem].test':'ok'}
    }, {
        upsert: true,
        arrayFilters: [{'elem.code': 'c'}]
    }
)
  1. 如果文档不存在于集合中
// Desired result
{
    'id': 1,
    'array': [{
        'code': 'a'
    }, {
        'code': 'b'
    }, {
        'code': 'c'
        'test': 'ok'
    }]
}

在那种情况下,我有这个错误:

<块引用>

db.test.update({ 'id': 3 }, { $set: {'array.$[elem].test':'ok'} }, { upsert: true, arrayFilters: [{'elem.code': 'a'}] } )

我想用这样的查询元素更新一个新文档:

WriteError: The path 'array' must exist in the document in order to apply array updates., full error: {'index': 0, 'code': 2, 'errmsg': "The path 'array' must exist in the document in order to apply array updates."}
查询参数中的

// Desired result { 'id': 3, 'array': [{ 'code': 'a' 'test': 'ok' }] } 似乎不适用于数组。
非常感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

upsert 在数组中无效,如果您确实将 MongoDB 版本从 4.0.5 更新到 4.2,那么您可以从 MongoDB 4.2 开始使用 update with aggregation pipeline

情况 1:如果文档存在于集合中但没有带有 'code': 'c' 的单元格:

var id = 2;
var item = { code: "c", test: "ok" };

Playground

情况 2:如果文档不存在于集合中:

var id = 3;
var item = { code: "a", test: "ok" };

Playground

  • $ifNull 检查字段是否不存在然后返回空
  • $cond 检查输入 code 是否在数组中
    • 是,然后 $mep 迭代 array 的循环并检查条件是否匹配然后更新其他字段,否则返回空对象
    • $mergeObjects 将当前对象与更新的字段合并
    • 不,$concatArrays 将当前 array 与新项目对象连接
db.collection.update(
  { "id": id },
  [{
    $set: {
      array: {
        $cond: [
          {
            $in: [item.code, { $ifNull: ["$array.code", []] }]
          },
          {
            $map: {
              input: "$array",
              in: {
                $mergeObjects: [
                  "$$this",
                  {
                    $cond: [{ $eq: ["$$this.code", "c"] }, item, {}]
                  }
                ]
              }
            }
          },
          {
            $concatArrays: [{ $ifNull: ["$array", []] }, [item]]
          }
        ]
      }
    }
  }],
  { upsert: true }
)