2013-05-13 2 views
1

사전이 포함 된 배열로 어떻게 작업합니까? 모든 텍스트를 검색 할 수 있도록 모든 post 필드를 모으려고합니다.사전 배열에 대한 mongoose 쿼리

쉘은 mongo 쉘을 사용하여 아무데도 계속 가지 않습니다.

User.Blog().find({}).where('post').in(writing).exec(function (err, result) { 
    //do something with results 
}); // doesn't work 

스키마 (편집 : @JAM 코멘트에서 고정)

var blogSchema = new mongoose.Schema({ 
    group: String, 
    writing: [{ 
     post: String, 
     name : Number 
     }] 
}); 

var Blog = mongoose.model('Blog', blogSchema); 

업데이트 :

{ 
    group: "Design Writing", 
    writing: [{ 
     post: "A very very very short post.", 
     name: 10 
    }, { 
     post: "An early morning post about everything.", 
     name: 11 
    }] 
} 
: JSON 데이터와 몽고 쉘을 사용하여 MongoDB에 데이터를 입력하는 명령을 추가

* 또는 여기에이라는 컬렉션의 db에 삽입 할 한 줄로: 당신의 writing 배열 *

db.my_collection.insert({group: "Design Writing", writing: [{post: "A very very very short post.",name: 10}, {post: "An early morning post about everything.",name: 11}]}) 

답변

5

개체는 sub/embedded-documents로 처리됩니다. 즉, 데이터베이스에 저장 될 때 _id이 할당됩니다.

그래서, 당신이 하위 문서를 기반으로 Blog의를 조회 할 수있는 몇 가지 방법이 있습니다 :

var ObjectId = mongoose.Types.ObjectId; 

// Assuming these objects are in the 'writing' array of a Blog 
var postObject = { post: 'some text', name: 10 }, 
    postObjectWithId = { _id: new ObjectId(), post: 'some text', name: 10 }; 

// Example #1 Works! 
Blog.find({'writing.post': postObject.post}) 
    .exec(function(err, res){ onBlogResult("Ex#1", err, res) }); 

// Example #2 Works! 
Blog.find({})       
    .where('writing').in([postObjectWithId]) 
    .exec(function(err, res){ onBlogResult("Ex#2", err, res) }); 

// Example #3 Works - its the same as example #2! 
Blog.find({'writing': { $in: [ postObjectWithId ]}}) 
    .exec(function(err, res){ onBlogResult("Ex#3", err, res) }); 

// Example #4 Fails because of missing _id on postObject! 
Blog.find({'writing': { $in: [ postObject ]}}) 
    .exec(function(err, res){ onBlogResult("Ex#4", err, res) }); 

보시다시피, 당신이 할 수있는 당신이있는 경우 in를 사용하여 요소를 포함하고있는 배열 만 find 객체 전체 개체 (_id 포함).

는이 GIST에 전체 소스를 볼 수 있습니다 - 자신을 위해 그것을 밖으로 테스트 :

희망이 도움이 :)

Read the mongoose docs here.

+0

"postObj"에는 무엇이 들어 있습니까? 나는 '게시'를 시도했지만 작동하지 않습니다 - 가까이 있지만 뭔가가 꺼져 있습니다. 나는 쇠사슬에 묶여 혼란스러워진다. (예, 예를 만들 때 스키마를 잘못 입력했습니다.) –

+0

postObj 예'{post : "heyho", name : 1}'- 스키마에서 지정한대로. 나는 그것이 효과가 있다고 생각한다. – JAM

+0

흠. 그래도 작동이 안되는. find()는 작동하지만 몽구스를 사용하여 구조에 깊이 관입 할 수는 없습니다. 시도해 봤지만 12 개 버전을 사용해 보았습니다. 나는 exec 함수에서 명시 적으로 이것을 써서 필요한 것을 제거 할 수있다 : var just_the_post = result [0] [ 'writing'] [0] [ 'post']'; D –