web-dev-qa-db-ja.com

MongoDB内のドキュメントのObjectIdまたは_idを返す方法は?エラー "$ inには配列が必要です"

MongoDBにドキュメントがあり、このドキュメントのObjectIdを取得したいのですが、これまでにこれを行うメソッドが見つかりませんでした。

クエリの例:

 user= db.users.find({userName:"Andressa"})

これはこれを返します:

 { "_id" : ObjectId("53b1c579bdf3de74f76bdac9"), "userid" : 0, "userName" : "Andressa", "userEmail" : "[email protected]", "teams" : [ 1, 2, 3 ] }

ObjectIdに別のクエリを実行させたい。

例:

 userID =  `user._id();` //but this does not work, of course, its an example

したがって、ObjectIdを使用して、次のような別のクエリを実行できます。

 userFind = db.users.find({_id: userID})

更新:このコード:

 db.teams.find({_id:{$in: user.teams}})

このエラーを返します:

error: {
    "$err" : "Can't canonicalize query: BadValue $in needs an array",
    "code" : 17287

誰か知っていますか?

9
debeka

わかった!実際、私はこのコードでそれを行うことができました:

ちょうど置く代わりに:

user = db.users.findOne({userName:"And"})

私はちょうどしました:

  var user = db.users.findOne({userName:"And"})

そして

  user._id 

objectId( "someId")を返します。変数に保持したい場合は、次のようにします。

var Id = user._id. 

2番目の質問についてはわかりません。

4
debeka

Mongoシェルでは、これを使用して_idを取得できます。

user._id.str

または

user._id.toString()

ドキュメントを参照してください: http://docs.mongodb.org/manual/reference/method/ObjectId.valueOf/

8
kranteg

私は同じ問題であると思われるものに遭遇しました-未知のmongoドキュメントからObjectIdを取得する方法。汎用のデータコンテキストを構築し、更新および削除メソッド内に_idが必要でした。これを行う方法についての回答を探しているときにあなたの質問を見つけたので、私は最終的に私のために働いたものを投稿することにしました。

private BsonValue GetId<TEntity>(TEntity entity)
{
    var bsonDoc = entity.ToBsonDocument();
    return bsonDoc.GetElement("_id").Value;
}

次に、次のように使用します。

 var id = GetId<TEntity>(entity);
 var filter = builder.Eq("_id", id);
 var doc = collection.Find(filter).SingleOrDefault();

お役に立てれば。

2
GeekerMode

これを行うには、find()メソッドを使用できます。

db.collection.find()メソッドは実際のドキュメントを返しませんが、カーソルをドキュメントに返します。カーソルを反復することにより、そのドキュメント内のフィールドになります。

コード:

    var cursor=db.collection.find()

    var objectId= cursor.next()._id

上記のステートメントは、現在のカーソルインスタンスからObjectIdの値を取得します。すべてのobjectIdを取得する場合、カーソルを反復処理することにより、ObjectIdのすべての値を取得します。

最初のステップで受信したobjectIdを使用してドキュメントを直接検索するには、次のコードスニペットを使用できます。

       db.collection.find( { "_id": objectId},{ fields Of Your Choice } )
0
DanglingPointer