2013-04-22 13 views
9

Rozważmy następujący dokument:

{ 
    "_id" : "ID_01", 
    "code" : ["001", "002", "003"], 
    "Others" : "544554" 
} 

przeszedłem tej MongoDB doc for elemmatch-query & elemmatch-projection, ale nie jest w stanie zrozumieć to, jak wykorzystać takie same dla powyższego dokumentu.

Czy ktoś mógłby mi powiedzieć, w jaki sposób mogę użyć $elemMatch dla kodu pola?

+1

jest '$ in' naprawdę co szukasz? [docs] (http://docs.mongodb.org/manual/reference/operator/in/) – WiredPrairie

+1

Przykład twojego aktualnego zapytania i wynik, który próbujesz osiągnąć, byłby bardzo pomocny. Wygląda na to, że potrzebujesz zapytania "$ in". – Stennie

+0

@WiredPrairie: tak dokładnie ... dzięki temu zadziałało. –

Odpowiedz

8

Będziesz chciał użyć operatora $in zamiast $elemMatch w tym przypadku, ponieważ $in może być użyty do wyszukania wartości (lub wartości) wewnątrz określonego pola. $ in wymaga podania listy wartości jako tablicy. Dodatkowo, dla twojej sprawy, znajdzie albo pojedynczą wartość, albo przeszukuje tablicę wartości. Cały pasujący dokument zostanie zwrócony.

Na przykład, można go używać tak:

db.mycodes.find({ code: { $in: ["001"] } }) 

które mogłyby zostać uproszczone, aby po prostu być:

db.mycodes.find({ code: "001" }) 

Jak MongoDB będzie wyglądać w tablicy za jednym meczu jak powyżej ("001").

Albo jeśli chcesz szukać "001" lub "002":

db.mycodes.find({ code: { $in: ["001", "002"] } }) 

$in documentation

+0

$ in pobiera tylko tablice: "Can not canonicalize query: BadValue $ in potrzebuje tablicy" –

+0

@RaxWunter - poprawny. Nie wiem, dlaczego tak było, ponieważ potwierdziłem, że zachowuje się tak jak w wersji 2.6. Dzięki! (To było od kwietnia 2013, więc coś może się zmienić w konsoli lub DB ... nie jestem pewien co się stało :)) – WiredPrairie

2

Jeśli jesteś po prostu patrząc dopasować wszystkie dokumenty z tablicy zawierającej daną wartość, można po prostu określić wartość w odniesieniu do tej tablicy, np

db.mycodes.find({ code: '001' }) 

który w ten sposób wróci wszystkie dokumenty, które zawierały '001' w ich code tablicy

+0

To wszystko! Dzięki. – thomas

Powiązane problemy