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

测试数据:

{ "_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)

执行结果正常

请问是怎么回事?

天蓬老师
天蓬老师

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

全員に返信(2)
PHPzhong

リーリー

ここのコメントは配列です (エラーメッセージを参照)。更新したい場合は、それを走査する必要があります

いいねを押す +0
Ty80

上の人は正しいです。コメントは配列ですが、それをトラバースする必要はありません。投稿者が使用している「$」が解決策です。ただ使い方が間違っていただけです。 $の意味を見てみましょう。

update の最初の 2 つのパラメータ、<クエリ条件> および <更新操作> でクエリするコンテンツが配列内のコンテンツである場合は、<更新操作> を使用できます。 $" は、前のクエリで一致した要素を参照します。

2 番目の例は、配列のクエリです。最初の例では、title="ABC"的doc, 这里匹配查询条件的不包含array. 实际上,你可以把两个例子中的的查询条件写在一起,查询 title="..." と Joe のメッセージが含まれるドキュメントを見つけて、見つかった Joe のメッセージの投票を +1 で追加しました。

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート