2013-12-09 17 views
21

Tôi đang cố sử dụng truy vấn sau trong MongoDB nhưng nó không chạy.

db.test.aggergate(
$match: {$and: [type: {$in: ["TOYS"]}, type: {$nin: ["BARBIE"]}, time: 
{$lt:ISODate("2013-12-09T00:00:00Z")}]}}) 

Nó nói ký tự không hợp lệ ":".

Có thể sử dụng $ và với $ match không? Tôi đã thấy một ví dụ về diễn đàn này của $ hoặc với $ match nên tôi cho rằng điều này là có thể.

Cảm ơn bạn trước sự giúp đỡ và hướng dẫn của bạn.

+0

Đọc tài liệu http://docs.mongodb.org/manual/reference/operator/aggregation/match/ – bodi0

+0

Cảm ơn bạn đã trả lời. Tôi thu thập rằng tôi không cần phải sử dụng $ và vì nó được ngụ ý trong truy vấn? – Manus

+3

Đây là truy vấn hoạt động hoàn hảo mà không có khung tổng hợp, sử dụng tìm kiếm thường xuyên –

Trả lời

48

$ và $ match chỉ hoạt động tốt.

Bạn có lỗi cú pháp trong truy vấn của mình. Thử cái này.

db.test.aggregate([ 
        { 
        $match: { 
          $and: [ 
           {type: {$in: ["TOYS"]}}, 
           {type: {$nin: ["BARBIE"]}}, 
           {time: {$lt:ISODate("2013-12-09T00:00:00Z")}} 
          ] 
        } 
        } 
        ]) 

Và đối với những gì bạn đang cố gắng làm, bạn không cần $and.

+1

Hi Ajai ..... cảm ơn sự điều chỉnh. Và vâng tôi phát hiện ra rằng $ và không bắt buộc. Cảm ơn tất cả vì đã giúp tôi. – Manus

+1

Không sử dụng dự phòng '$ và' trong trường hợp này? Ít nhất trong MongoDB 3.2+ nó có vẻ là. –

+1

Có. $ và là dư thừa ở đây.Chúng tôi có nó để trả lời câu hỏi: 'Có thể sử dụng $ và với $ match?' – 4J41

4

Nếu ai muốn từ chối câu trả lời của tôi nó là ok, đây là một câu hỏi điển hình với thiếu nghiên cứu

db.test.find({$and: [ {"type": {$in: ["TOYS"]}}, 
         {"type": {$nin: ["BARBIE"]}}, 
         {"time": {$lt:ISODate("2013-12-09T00:00:00Z")}} 
        ] 
}) 

VÀ làm việc với FIND, nhận được một loạt các trận đấu (nhưng nó không phải là một hướng dẫn phù hợp) Aggregation khuôn khổ là cho một cái gì đó hoàn toàn khác nhau, nó giống như từ nói, để tổng hợp (đếm, tổng, avg, và như vậy có giá trị nhóm hoặc thư giãn, vv)

+0

Cảm ơn câu trả lời Maximiliano. Tôi đã sử dụng một tập hợp vì tôi cần nhóm theo userID sau khi khớp các bản ghi này. Xin lỗi vì đã đưa ra một bức tranh không hoàn chỉnh về vấn đề này. Vì vậy, tôi thu thập $ và không thể với tập hợp sau đó .... – Manus

+3

Bạn có thể sử dụng $ và với tổng hợp nhưng bạn không phải viết nó, và ngầm sử dụng các bộ lọc khác nhau, trên thực tế bạn có thể ống các bộ lọc trong trường hợp một trong số họ cần một giải pháp khác. –

+2

'$ match' nhận' {} '. Điều đó có nghĩa, nó có thể mất '$ và' tốt. –

3
{ 
    $match: { 
    $or:[ 
     {'sender':sender, 'recipient':recipient}, 
     {'recipient':sender,'sender':recipient} 
    ] 
    } 
} 

sử dụng $ hoặc

0

Dưới đây là làm thế nào tôi đang làm với nhiều $ và cùng với $ hoặc

User.aggregate([ 
{ 
    $lookup:{ 
    from:'influencers', 
    localField:'_id', 
    foreignField:'user', 
    as:'influencer' 
} 
}, 
{ $match:{ '$and': 
    [ { '$and': [ { 'influencer.aboutMe.birthday': { '$lte': 2017-09-11T09:10:07.283Z } } ] }, 
    { '$and': [ { 'influencer.aboutMe.minPrice': { '$gte': 0 } } ] }, 
    { '$and': 
    [ { '$or': 
     [ { '$and': [ { 'influencer.followed_by': { '$gte': 0 } } ] }, 

     { '$and': [ { 'influencer.youTubeSubscribercount': { '$gte': 
    0 } } ] } ] } ] }, 
{ 'influencer.isAdminverified': true }, 
{ 'influencer.status': 'Verified' } ] } } 

]); 
Các vấn đề liên quan