問題タブ [rmongodb]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
r - $and 演算子を使用して rmongodb クエリを作成する方法
rmongodb を使用して、R で MongoDB データベースにアクセスしたいと考えています。次のクエリを作成しようとしました。
私は 3 つの異なる方法で bson オブジェクトを作成しようとしましたが、うまくいきませんでした。
方法 1:
方法 2:
方法 3:
それらのどれも機能しません。すべて空の結果を返します。
私はいつか検索しましたが、尋ねられた唯一の同様の質問はrmongodb です: using $or in query 解決策は、R 2.50 では利用できない代わりに RMongo を使用することでした。
私はこの問題で数日間立ち往生しています。解決策が見つからない場合は、Python で外部スクリプトを作成し、R から呼び出す必要があります。
r - MongoDB(rmongodb)の複数のドキュメントを更新します
関数処理の更新に関するいくつかの問題に遭遇しました(mongo.update()
)。
免責事項
私はまだMongoDBとrmongodbパッケージの両方に精通している最中なので、図解されている問題はすべて私の知識不足が原因である可能性があります;-)
準備
パッケージがロードされていることを確認する
グローバル変数
DBの初期状態を作成する
emtpyDBを確認します
ドキュメントを挿入
ドキュメントを更新/アップサートする
利用可能なドキュメントを一覧表示
この時点で、コレクションには2つのドキュメントがあります。これは私たちが期待していることです。
問題#1:デフォルトのフラグ値で更新(0
)
更新を実行した後、残っているドキュメントは1つだけです。
問題#2:「マルチ」フラグ値で更新(2
)
以前の更新でDBが破損したようであるため、最初からやり直してください。
空のDBを確認します
ドキュメントを挿入
ドキュメントの更新/アップサート
複数のドキュメントを更新しようとしています。ここで私が求めているのは、両方のコレクションの値をage
に変更することです99
現在のDB状態の調査
私は両方のドキュメントが持っていることを期待しますage = 99
。
r - MongoDB(rmongodb)にBSON配列を追加する
演算子を使用して配列に新しい値を追加する方法について、この情報を見つけました。ただし、これをrmongodb$push
で機能させることはできないようです。
DBに次のドキュメントがあるとします
配列に値を追加したいのですがtags
。これが私が試したことです:
1を試す
ここでは、$push演算子を使用してみました
コード
ログファイル
2を試す
ここでは、$addToSet演算子を使用してみました
コード
ログファイル
私はここで何が間違っているのですか?
追加情報
興味のある方へ:サンプルドキュメントを作成したコードは次のとおりです
2013-01-29を編集
10genのTadMarshallがバグレポートへのコメントで示唆しているように、MongoDBサーバーをモードで実行して(BSON構造を検証)、ドキュメントを挿入するコードを再実行しまし--objcheck
た。サーバーはドキュメントを挿入できません。失敗したアサーションが原因です。フラグなしでサーバーを実行すると--objcheck
、挿入は成功します(ただし、これはおそらく検証が行われないという事実によるものです)。
tags
最初のコードで、IMHOがMongoDBのインデックス付け規則と同期していないというドキュメントが作成されたため、2つの異なるバージョンの配列を組み合わせてみました。
(潜在的に)無効なドキュメント
それが私が上でそれをした方法です。配列インデックスが。で始まることを確認していないことに気づきました0
。このドキュメントの挿入は失敗します(以下のログファイルを参照)
有効なドキュメント
インデックスがで始まることを確認した0
ので、これは間違いなく有効なBSONドキュメントである必要があります。ただし、このドキュメントの挿入も失敗します(以下のログファイルを参照)
ログファイル
r - ネストされた配列を更新するための位置 `$` 演算子の複数の使用
この質問はこれと密接に関連しており、NoSQL コンテキストでのスキーマ設計に関して与えられたアドバイスを検討しますが、これを理解したいと思っています。
実際の質問
次のドキュメントがあるとします。
基本的に知りたい
MongoDB の位置
$
演算子 ( details ) を複数回使用できる場合、または別の言い方をすれば、「ネスト度」が 1 より大きい配列/ドキュメント構造を含む更新シナリオで:{ <update operator>: { "paths.$.queries.$.requests" : value } }
(動作しません)$
トップレベルの配列に「のみ」使用でき、「より高いレベル」の配列に明示的なインデックスを使用するようにバインドされる代わりに:{ <update operator>: { "paths.$.queries.0.requests" : value } }
) (作品)可能であれば、対応する R 構文がどのように見えるか。
以下に、再現可能な例を示します。できるだけ簡潔にしようとしました。
コード例
データベース接続
文書例
明示的な位置インデックスを使用したネストされた配列の更新 (機能)
これは機能しますが、第 2 レベルの配列( array の subdoc 要素にネストされている) の明示的なインデックスが必要です。queries
paths
位置インデックスを使用したネストされた配列の更新$
(機能しません)
ここで、サーバーに配列( )の目的のサブドキュメント要素を見つけさせるために、私が行ったのと同じように、明示的なもの0
を位置演算子に置き換えたいと思います。$
paths
paths.$.queries
AFAIUドキュメント、これは重要なことは「正しい」クエリセレクターを指定することであるため、機能するはずです。
位置 $ 演算子は update() メソッドで使用され、更新クエリ セレクターの最初の一致のプレースホルダーとして機能します。
正しいネストされた要素を見つけるクエリセレクターを指定したと思います(一部のため)paths.queries.name="query1"
:
「プレーンなMongoDB」構文に翻訳すると、クエリセレクターは次のようになります
これは有効なクエリ セレクターのように思えます。実際、目的の要素/ドキュメントと一致します:
私の考えでは、トップレベルで機能する場合、(クエリセレクターが適切なネストされたコンポーネントを指している限り) より高いレベルでも機能しないのはなぜでしょうか?
ただし、サーバーはネストされたまたは複数の使用を好まないようです$
:
MongoDB がこれをサポートしていないために機能しないのか、それとも R 構文を正しく理解していなかったのかはわかりません。
r - R から Mongodb に data.frame を挿入する
を使用してRで読み取ったTwitterデータのCSVread.table
ファイルがあり、そのデータに対していくつかのアルゴリズムを実行し、出力を表形式のデータとして取得しました。この表形式のデータを に挿入したいと思いますmongodb
。誰でも助けることができますか?
表形式のデータは次のようになります。
私が実行しているときmongo insert
、データはに挿入されてmongodb
いますが、データはmongodbで次のようになります。
表形式のデータと同様に、データをmongodbに挿入する必要があります。
r - Mongo カーソル ループが遅い
rev_timestamp のインデックスが作成され、約 2 億レコードのテーブルに対して次のプロセスがあります。非常に高速に動作しますが、ループ中は約 10 秒ごとに 10 ~ 50 秒間一時停止します。何故ですか?
ログは、検索が完了したことを示しています。
ただし、スクリプトは項目 102 でスタックし、進行状況がサーバーに表示されます。
インデックス:
これは正常な動作ですか。私の知る限り、カーソルを使用するとキーの取得が高速になるはずです。最初の検索には長い時間がかかります。
r - MongoDB から個別のフィールド セットを取得する
MongoDB コマンド ラインでグループ メソッドを使用できることはわかっていますが、rmongodb ライブラリでそのようなタスクを実行する方法が見つかりません。現時点では、いくつかのパラメーターでフィルター処理されたすべての値を取得し、そこに存在しない場合に備えて、それらを新しいデータ フレームに追加してループする必要があります。
MongoDBでグループ化すると桁違いに時間がかかるため、非常に非効率的です...直接MongoDBコマンドを使用する簡単な方法はありますか?
r - タイムスタンプによる rmongodb での mongo のクエリ
タイムスタンプに基づいて mongodb をクエリしようとしていますが、常に空のリストが返されるようです。何か間違ったフォーマットをしているに違いありません。以下のmongoドキュメントの場合:
作成したフィールドでドキュメントをフィルタリングしたい。ただし、使用しようとすると:
空のリストを取得します。$gt または $lt を使用しただけでは機能しません。日付の形式が間違っていませんか? それともクエリが間違っていますか?