使用python更新MongoDB嵌套文档

时间:2016-10-25 03:47:08

标签: jquery mongodb python-2.7 python-3.x pymongo

我正在尝试聚合一些mongoDB记录,并从具有1500条记录的聚合查询中返回此值:

public class ExampleActivity extends AppCompatActivity {

    private ArrayAdapterSearchView searchView;
    private LinearLayout recycleLayout;
    private ArrayList<String> stringList;
    private RecyclerView recyclerView;
    private CustomAdapter adapter;
    private Toolbar mToolbar1, mToolbar2;
    private FrameLayout frameLayout;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_search);

        mToolbar1 = (Toolbar) findViewById(R.id.nested_toolbar_1);
        mToolbar2 = (Toolbar) findViewById(R.id.nested_toolbar_2);

        frameLayout = (FrameLayout) findViewById(R.id.nested_parentframe);

        setSupportActionBar(mToolbar2);
        getSupportActionBar().setTitle("Search");
        mToolbar1.setNavigationIcon(R.mipmap.ic_action_overflow);

        mToolbar2.setTitleTextColor(getResources().getColor(android.R.color.tertiary_text_light));

        recycleLayout = (LinearLayout) findViewById(R.id.recyclerViewLayout);

        recyclerView = (RecyclerView) findViewById(R.id.cardsList);
        recyclerView.setHasFixedSize(true);
        LinearLayoutManager llm = new LinearLayoutManager(this);
        llm.setOrientation(LinearLayoutManager.VERTICAL);
        recyclerView.setLayoutManager(llm);

        getSupportActionBar().setDisplayShowHomeEnabled(true);

        String[] strArray = new String[]{"Item One", "Item Two", "Item Three", "Item Four", "Item Five"};
        //This is your String array
        for(int i = 0; i < strArray.length; i++){
            stringList.add(strArray[i]);
        }

        if(!stringList.isEmpty()){
            adapter = new CustomAdapter(this, stringList);
            recyclerView.setAdapter(adapter);

            recycleLayout.setVisibility(View.VISIBLE);

            adapter.setOnItemClickListener(new CustomAdapter.OnItemClickListener() {
                @Override
                public void onItemClick(String item) {
                    searchView.setQuery(item, false);
                }
            });
        }
        else{
            recycleLayout.setVisibility(View.GONE);
        }       

    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.search_menu, menu);

        MenuItem searchItem = menu.findItem(R.id.search_menu_item);

        searchView = (ArrayAdapterSearchView) MenuItemCompat.getActionView(searchItem);
        searchView.setLayoutParams(new ActionBar.LayoutParams(Gravity.LEFT));

        searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
            @Override
            public boolean onQueryTextSubmit(String query) {
                return false;
            }

            @Override
            public boolean onQueryTextChange(String query) {
                if (query.length() != 0) {
                    if (null != adapter) {
                        adapter.filter(query.toString());//This will filter the RecyclerView
                        recyclerView.setVisibility(View.VISIBLE);
                    }
                }
                else{
                    recyclerView.setVisibility(View.GONE);
                }
                return false;
            }
        });

        searchView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String length = searchView.getText();
                searchView.setSelection(length.length());
            }
        });

        return true;
    }

}

如何为{ "_id": { "Year": 2016, "locationID": " WL 001", "Day": 25, "Hour": 12, "Month": 1 }, "temperature": 10.858749999999999, "pH": 0, "Conductivity": 2032.375 } temperaturepH插入结果值,以便插入数据库的数据具有以下格式?

Conductivity

我尝试了几种方法,但我似乎无法得到结果。

1 个答案:

答案 0 :(得分:0)

您需要在聚合管道中添加额外的步骤,以投影数据;在pymongo:

from pymongo import MongoClient

uri = "mongodb://localhost:27017/"
client = MongoClient(uri)
db = client['test']

db['test'].save({
    "_id": {
        "Year": 2016,
        "locationID": " WL 001",
        "Day": 25,
        "Hour": 12,
        "Month": 1
    },
    "temperature": 10.858749999999999,
    "pH": 0,
    "Conductivity": 2032.375
})


pipeline = [
{
    "$project": {
        '_id': '$_id',
        'Readings': {
            'pH': {'value': '$pH'},
            'temperature': {'value': '$temperature'},
            'Conductivity': {'value': '$Conductivity'}
        }
    }
},
]

result =  db['test'].aggregate(pipeline)
相关问题