mongodb "$" 操作符问题
天蓬老师
天蓬老师 2017-04-21 11:16:52
0
2
663

测试数据:

{ "_id" : ObjectId("4b97e62bf1d8c7152c9ccb74"), "title" : 
"ABC", 
  "comments" : [ { "by" : "joe", "votes" : 3 }, { "by" : "jane", 
"votes" : 7 } ] } 

执行更新语句:

语句一:

db.mydb.update({title:"ABC"}, {$inc:{"comments.$.votes":1}}, 0, 1)

执行报错:Cannot apply the positional operator without a corresponding query field containing an array.

语句二:

db.mydb.update({"comments.by":"joe"}, {$inc:{"comments.$.votes":1}}, 0, 1)

执行结果正常

请问是怎么回事?

天蓬老师
天蓬老师

欢迎选择我的课程,让我们一起见证您的进步~~

membalas semua(2)
PHPzhong
 "comments" : [ { "by" : "joe", "votes" : 3 }, { "by" : "jane", 
"votes" : 7 } ]

Komen di sini ialah tatasusunan (lihat mesej ralat Jika anda ingin mengemas kini, anda perlu melintasi

).
Ty80

Apa yang anda katakan di atas adalah betul, ulasan ialah tatasusunan, tetapi tidak perlu melintasinya. "$" yang digunakan oleh poster adalah penyelesaiannya. Cuma salah guna. Mari kita lihat maksud $.

Dalam dua parameter pertama kemas kini, <syarat pertanyaan> dan <operasi kemas kini>, jika kandungan yang anda tanya dalam <syarat pertanyaan> adalah kandungan dalam tatasusunan, dalam <operasi kemas kini> "$" untuk merujuk kepada elemen yang dipadankan dalam pertanyaan sebelumnya.

Contoh kedua anda ialah menanyakan tatasusunan. Dalam contoh pertama, anda menemui dokumen title="ABC" dan syarat pertanyaan di sini tidak mengandungi tatasusunan Malah, anda boleh menulis syarat pertanyaan dalam dua contoh bersama-sama, pertanyaan title="..." dan mempunyai Dokumen tempat Joe. meninggalkan mesej, kemudian tambahkan +1 pada undian mesej Joe yang ditemui

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan