0

MongoDB には、users と address という 2 つの主要なコレクションがあります。1 番目のコレクション (ユーザー) で '$ref' と '$id' を使用して、2 番目のコレクション (アドレス) のドキュメントを参照しています。ユーザーとそのアドレスの詳細を表示するクエリを書きたいと思います。

これは私の最初のコレクション「ユーザー」です。1 件のドキュメントがあります

{
    "_id" : ObjectId("52ffc33cd85242f436000001"),
    "contact" : "987654321",
    "dob" : "01-01-1991",
    "name" : "Tom Benzamin",
    "address" : [ 
        {
            "$ref" : "address",
            "$id" : ObjectId("534009e4d852427820000002"),
            "$db" : "test"
        }, 
        {
            "$ref" : "address",
            "$id" : ObjectId("52ffc4a5d85242602e000000"),
            "$db" : "test"
        }
    ]
}

これは私の2番目のコレクション「アドレス」です。3つのドキュメントがあります

{
    "_id" : ObjectId("52ffc4a5d85242602e000000"),
    "building" : "22 A, Indiana Apt",
    "pincode" : 123456.0000000000000000,
    "city" : "Los Angeles",
    "state" : "California"
},
{
    "_id" : ObjectId("52ffc4a5d85242602e000001"),
    "building" : "170 A, Acropolis Apt",
    "pincode" : 456789.0000000000000000,
    "city" : "Chicago",
    "state" : "Illinois"
},
{
    "_id" : ObjectId("534009e4d852427820000002"),
    "building" : "22 A, Indiana Apt",
    "pincode" : 123456.0000000000000000,
    "city" : "Los Angeles",
    "state" : "California"
}

このコードを書きましたが、機能していません。実行すると「null」という単語が表示されます

var user = db.users.findOne({"name":"Tom Benzamin"})
var dbRef = user.address
db[dbRef.$ref].findOne({"_id":(dbRef.$id)})
4

1 に答える 1

0

dbRef は配列であるため、null が表示されます。

 {
    "0" : {
        "$ref" : "address",
        "$id" : ObjectId("52ffc4a5d85242602e000000"),
        "$db" : "test"
    },
    "1" : {
        "$ref" : "address",
        "$id" : ObjectId("534009e4d852427820000002"),
        "$db" : "test"
    }
}

これを試してください:

var user = db.users.findOne({"name":"Tom Benzamin"})
var dbRef = user.address
var ids = new Array();
for (i = 0; i < dbRef.length; i++){
    ids.push(dbRef[i].$id)
}
db[dbRef[0].$ref].find({"_id":{$in:ids}});
于 2015-12-03T15:29:18.750 に答える